Dataset of pm2.5 with lat and lon only¶
1. Load the modules¶
import requests
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
Get API from OpenWeather Webpage
# API Key and City Information
api_key = 'a693b748d40c2a70d69295b2caad893a'
city_name = 'Bangkok,TH'
2. Get Pollution Dataset API and convert to dataframe¶
# Get coordinates from city name (Geocoding API)
geocode_url = f'http://api.openweathermap.org/geo/1.0/direct?q={city_name}&limit=1&appid={api_key}'
response = requests.get(geocode_url)
location_data = response.json()
if not location_data:
raise ValueError("Invalid city name or no location data available.")
# List of monitoring stations with their coordinates
stations = [
{'name': '3T', 'lat': 13.7563, 'lon': 100.5018}, #Ratchathewi Station
{'name': '5T', 'lat': 13.7367, 'lon': 100.5231}, #Suppose to be T54 Pathum Wan Station
{'name': '10T', 'lat': 13.7291, 'lon': 100.7750}, #Ladkrabang Station
{'name': '11T', 'lat': 13.7898, 'lon': 100.4486}, #Taling Chan Station
{'name': '12T', 'lat': 13.8225, 'lon': 100.5147}, # Bang Sue Station
{'name': '15T', 'lat': 13.7083, 'lon': 100.3728}, #Bang Khae Station
{'name': '61T', 'lat': 13.6796, 'lon': 100.6067}, #Bang Na Station
]
# Define the time range (from April 1, 2024, to now)
start_date = int(pd.Timestamp("2024-04-05 00:00:00").timestamp())
end_date = int(pd.Timestamp.now().timestamp())
# Fetch air pollution data
pollution_data = []
#Pull all the Variables
for station in stations:
lat = station['lat']
lon = station['lon']
pollution_url = (
f'http://api.openweathermap.org/data/2.5/air_pollution/history?'
f'lat={lat}&lon={lon}&start={start_date}&end={end_date}&appid={api_key}'
)
response = requests.get(pollution_url)
data = response.json()
if 'list' in data:
for entry in data['list']:
dt = pd.to_datetime(entry['dt'], unit='s')
components = entry['components']
pollution_data.append({
'datetime': dt,
'station': station['name'],
'lat': lat,
'lon': lon,
'pm2_5': components.get('pm2_5', None),
'pm10': components.get('pm10', None),
'so2': components.get('so2', None),
'no2': components.get('no2', None),
'o3': components.get('o3', None),
'co': components.get('co', None),
})
else:
print(f"No data available for station {station['name']} (lat={lat}, lon={lon})")
# Convert to DataFrame
pollution_df = pd.DataFrame(pollution_data)
#Check DataFrame Shape
pollution_df.shape
(60466, 10)
#Check Sample Data first five row
pollution_df.head()
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-04-05 00:00:00 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 2024-04-05 01:00:00 | 3T | 13.7563 | 100.5018 | 63.50 | 110.15 | 46.25 | 44.55 | 0.93 | 1869.20 |
| 2 | 2024-04-05 02:00:00 | 3T | 13.7563 | 100.5018 | 64.57 | 110.58 | 47.68 | 45.24 | 1.79 | 1869.20 |
| 3 | 2024-04-05 03:00:00 | 3T | 13.7563 | 100.5018 | 62.25 | 106.34 | 45.30 | 43.53 | 1.99 | 1615.52 |
| 4 | 2024-04-05 04:00:00 | 3T | 13.7563 | 100.5018 | 53.40 | 88.52 | 36.24 | 43.18 | 5.14 | 1241.68 |
#Check All Sample Data
pollution_df
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-04-05 00:00:00 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 2024-04-05 01:00:00 | 3T | 13.7563 | 100.5018 | 63.50 | 110.15 | 46.25 | 44.55 | 0.93 | 1869.20 |
| 2 | 2024-04-05 02:00:00 | 3T | 13.7563 | 100.5018 | 64.57 | 110.58 | 47.68 | 45.24 | 1.79 | 1869.20 |
| 3 | 2024-04-05 03:00:00 | 3T | 13.7563 | 100.5018 | 62.25 | 106.34 | 45.30 | 43.53 | 1.99 | 1615.52 |
| 4 | 2024-04-05 04:00:00 | 3T | 13.7563 | 100.5018 | 53.40 | 88.52 | 36.24 | 43.18 | 5.14 | 1241.68 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60461 | 2025-04-12 17:00:00 | 61T | 13.6796 | 100.6067 | 1.57 | 2.11 | 0.27 | 1.22 | 12.95 | 116.50 |
| 60462 | 2025-04-12 18:00:00 | 61T | 13.6796 | 100.6067 | 1.59 | 2.07 | 0.23 | 1.12 | 12.80 | 118.82 |
| 60463 | 2025-04-12 19:00:00 | 61T | 13.6796 | 100.6067 | 1.65 | 2.06 | 0.22 | 1.09 | 12.47 | 121.14 |
| 60464 | 2025-04-12 20:00:00 | 61T | 13.6796 | 100.6067 | 1.73 | 2.11 | 0.24 | 1.13 | 11.94 | 123.10 |
| 60465 | 2025-04-12 21:00:00 | 61T | 13.6796 | 100.6067 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
60466 rows × 10 columns
pollution_df .tail()
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 60461 | 2025-04-12 17:00:00 | 61T | 13.6796 | 100.6067 | 1.57 | 2.11 | 0.27 | 1.22 | 12.95 | 116.50 |
| 60462 | 2025-04-12 18:00:00 | 61T | 13.6796 | 100.6067 | 1.59 | 2.07 | 0.23 | 1.12 | 12.80 | 118.82 |
| 60463 | 2025-04-12 19:00:00 | 61T | 13.6796 | 100.6067 | 1.65 | 2.06 | 0.22 | 1.09 | 12.47 | 121.14 |
| 60464 | 2025-04-12 20:00:00 | 61T | 13.6796 | 100.6067 | 1.73 | 2.11 | 0.24 | 1.13 | 11.94 | 123.10 |
| 60465 | 2025-04-12 21:00:00 | 61T | 13.6796 | 100.6067 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
2. Pre-Processing¶
pollution_df['datetime'].diff().value_counts()
datetime 0 days 01:00:00 60403 1 days 01:00:00 42 2 days 01:00:00 7 5 days 01:00:00 7 -373 days +03:00:00 6 Name: count, dtype: int64
Handling gaps¶
actual_range = pd.date_range(start=pollution_df ['datetime'].min(), end=pollution_df ['datetime'].max(), freq='h')
actual_range
DatetimeIndex(['2024-04-05 00:00:00', '2024-04-05 01:00:00',
'2024-04-05 02:00:00', '2024-04-05 03:00:00',
'2024-04-05 04:00:00', '2024-04-05 05:00:00',
'2024-04-05 06:00:00', '2024-04-05 07:00:00',
'2024-04-05 08:00:00', '2024-04-05 09:00:00',
...
'2025-04-12 12:00:00', '2025-04-12 13:00:00',
'2025-04-12 14:00:00', '2025-04-12 15:00:00',
'2025-04-12 16:00:00', '2025-04-12 17:00:00',
'2025-04-12 18:00:00', '2025-04-12 19:00:00',
'2025-04-12 20:00:00', '2025-04-12 21:00:00'],
dtype='datetime64[ns]', length=8950, freq='h')
Creating New DataFrame¶
# Create a new DataFrame with all datetime and station combinations
stations = pollution_df [['lat', 'lon']].drop_duplicates()
# Create full cartesian product of stations × timestamps
full_index = pd.MultiIndex.from_product([actual_range, stations.itertuples(index=False, name=None)],
names=["datetime", "station_info"])
# Convert station lat/lon to tuples for merging
pollution_df ["station_info"] = list(zip(pollution_df ["lat"], pollution_df ["lon"]))
# Merge with full datetime-station grid to fill missing timestamps per station
full_df = pd.DataFrame(index=full_index).reset_index().merge(pollution_df , on=["datetime", "station_info"], how="left")
# Split 'station_info' back into separate lat/lon columns
full_df[["lat", "lon"]] = pd.DataFrame(full_df["station_info"].tolist(), index=full_df.index)
# Drop redundant column
full_df.drop(columns=["station_info"], inplace=True)
# Check for missing timestamps
print(full_df["datetime"].diff().value_counts())
print('\n')
print('-'*50)
print('There can be a duplicate timestamp due to many stations are being recorded at the same time')
datetime 0 days 00:00:00 53700 0 days 01:00:00 8949 Name: count, dtype: int64 -------------------------------------------------- There can be a duplicate timestamp due to many stations are being recorded at the same time
Check missing values¶
#Check Missing Values
full_df.isna().sum()
datetime 0 station 2184 lat 0 lon 0 pm2_5 2184 pm10 2184 so2 2184 no2 2184 o3 2184 co 2184 dtype: int64
Check unique values of Latitide and Longtitude¶
#Check Latitude unique Value
full_df['lat'].unique()
array([13.7563, 13.7367, 13.7291, 13.7898, 13.8225, 13.7083, 13.6796])
#Check Longitude unique Value
full_df['lon'].unique()
array([100.5018, 100.5231, 100.775 , 100.4486, 100.5147, 100.3728,
100.6067])
full_df['station'].unique()
array(['3T', '5T', '10T', '11T', '12T', '15T', '61T', nan], dtype=object)
full_df.isna().sum()
datetime 0 station 2184 lat 0 lon 0 pm2_5 2184 pm10 2184 so2 2184 no2 2184 o3 2184 co 2184 dtype: int64
full_df.groupby(['lat', 'lon'])['station'].nunique()
lat lon 13.6796 100.6067 1 13.7083 100.3728 1 13.7291 100.7750 1 13.7367 100.5231 1 13.7563 100.5018 1 13.7898 100.4486 1 13.8225 100.5147 1 Name: station, dtype: int64
full_df[full_df['station'].isna()]
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 175 | 2024-04-06 01:00:00 | NaN | 13.7563 | 100.5018 | NaN | NaN | NaN | NaN | NaN | NaN |
| 176 | 2024-04-06 01:00:00 | NaN | 13.7367 | 100.5231 | NaN | NaN | NaN | NaN | NaN | NaN |
| 177 | 2024-04-06 01:00:00 | NaN | 13.7291 | 100.7750 | NaN | NaN | NaN | NaN | NaN | NaN |
| 178 | 2024-04-06 01:00:00 | NaN | 13.7898 | 100.4486 | NaN | NaN | NaN | NaN | NaN | NaN |
| 179 | 2024-04-06 01:00:00 | NaN | 13.8225 | 100.5147 | NaN | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 61490 | 2025-04-06 00:00:00 | NaN | 13.7291 | 100.7750 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61491 | 2025-04-06 00:00:00 | NaN | 13.7898 | 100.4486 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61492 | 2025-04-06 00:00:00 | NaN | 13.8225 | 100.5147 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61493 | 2025-04-06 00:00:00 | NaN | 13.7083 | 100.3728 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61494 | 2025-04-06 00:00:00 | NaN | 13.6796 | 100.6067 | NaN | NaN | NaN | NaN | NaN | NaN |
2184 rows × 10 columns
full_df['station'].value_counts()
station 3T 8638 5T 8638 10T 8638 11T 8638 12T 8638 15T 8638 61T 8638 Name: count, dtype: int64
isna = full_df['station'].isna().value_counts()
missing_stations = full_df[full_df['station'].isna()]
missing_stations
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 175 | 2024-04-06 01:00:00 | NaN | 13.7563 | 100.5018 | NaN | NaN | NaN | NaN | NaN | NaN |
| 176 | 2024-04-06 01:00:00 | NaN | 13.7367 | 100.5231 | NaN | NaN | NaN | NaN | NaN | NaN |
| 177 | 2024-04-06 01:00:00 | NaN | 13.7291 | 100.7750 | NaN | NaN | NaN | NaN | NaN | NaN |
| 178 | 2024-04-06 01:00:00 | NaN | 13.7898 | 100.4486 | NaN | NaN | NaN | NaN | NaN | NaN |
| 179 | 2024-04-06 01:00:00 | NaN | 13.8225 | 100.5147 | NaN | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 61490 | 2025-04-06 00:00:00 | NaN | 13.7291 | 100.7750 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61491 | 2025-04-06 00:00:00 | NaN | 13.7898 | 100.4486 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61492 | 2025-04-06 00:00:00 | NaN | 13.8225 | 100.5147 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61493 | 2025-04-06 00:00:00 | NaN | 13.7083 | 100.3728 | NaN | NaN | NaN | NaN | NaN | NaN |
| 61494 | 2025-04-06 00:00:00 | NaN | 13.6796 | 100.6067 | NaN | NaN | NaN | NaN | NaN | NaN |
2184 rows × 10 columns
full_df.groupby('station')[['lat', 'lon']].nunique()
| lat | lon | |
|---|---|---|
| station | ||
| 10T | 1 | 1 |
| 11T | 1 | 1 |
| 12T | 1 | 1 |
| 15T | 1 | 1 |
| 3T | 1 | 1 |
| 5T | 1 | 1 |
| 61T | 1 | 1 |
full_df.groupby(['lat', 'lon'])['station'].nunique()
lat lon 13.6796 100.6067 1 13.7083 100.3728 1 13.7291 100.7750 1 13.7367 100.5231 1 13.7563 100.5018 1 13.7898 100.4486 1 13.8225 100.5147 1 Name: station, dtype: int64
Remove the (Roadside, Bangkok) emtries that shared the same lat, lon¶
full_df.groupby(['lat', 'lon'])['station'].unique()
lat lon 13.6796 100.6067 [61T, nan] 13.7083 100.3728 [15T, nan] 13.7291 100.7750 [10T, nan] 13.7367 100.5231 [5T, nan] 13.7563 100.5018 [3T, nan] 13.7898 100.4486 [11T, nan] 13.8225 100.5147 [12T, nan] Name: station, dtype: object
full_df.head()
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-04-05 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 2024-04-05 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2 | 2024-04-05 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 3 | 2024-04-05 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 4 | 2024-04-05 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
pd.Series(full_df.index).diff().value_counts()
1.0 62649 Name: count, dtype: int64
full_df.isna().sum()
datetime 0 station 2184 lat 0 lon 0 pm2_5 2184 pm10 2184 so2 2184 no2 2184 o3 2184 co 2184 dtype: int64
3. Save the dataframe¶
import os
print(os.getcwd())
c:\Users\Legion 5 Pro\OneDrive\Documents\web_v3\Project PM2.5 code(11-4-25)\source_code
full_df.to_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv', index=True)
full_df
| datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-04-05 00:00:00 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 2024-04-05 00:00:00 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2 | 2024-04-05 00:00:00 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 3 | 2024-04-05 00:00:00 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 4 | 2024-04-05 00:00:00 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 62645 | 2025-04-12 21:00:00 | 10T | 13.7291 | 100.7750 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
| 62646 | 2025-04-12 21:00:00 | 11T | 13.7898 | 100.4486 | 3.05 | 3.48 | 0.25 | 1.57 | 6.27 | 149.25 |
| 62647 | 2025-04-12 21:00:00 | 12T | 13.8225 | 100.5147 | 4.75 | 5.61 | 0.59 | 2.80 | 6.24 | 200.72 |
| 62648 | 2025-04-12 21:00:00 | 15T | 13.7083 | 100.3728 | 4.27 | 4.74 | 0.23 | 1.94 | 1.04 | 172.77 |
| 62649 | 2025-04-12 21:00:00 | 61T | 13.6796 | 100.6067 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
62650 rows × 10 columns
pd.Series(full_df.index).diff().value_counts()
1.0 62649 Name: count, dtype: int64
4. Loading the saved dataset and start analysis¶
df = pd.read_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv', parse_dates=['datetime'])
df.head()
| Unnamed: 0 | datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 2024-04-05 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 1 | 2024-04-05 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2 | 2 | 2024-04-05 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 3 | 3 | 2024-04-05 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 4 | 4 | 2024-04-05 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
Validate the loaded dataframe¶
df.isna().sum()
Unnamed: 0 0 datetime 0 station 2184 lat 0 lon 0 pm2_5 2184 pm10 2184 so2 2184 no2 2184 o3 2184 co 2184 dtype: int64
df.set_index('datetime', inplace=True)
pd.Series(df.index).diff().value_counts()
datetime 0 days 00:00:00 53700 0 days 01:00:00 8949 Name: count, dtype: int64
df.head()
| Unnamed: 0 | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|
| datetime | ||||||||||
| 2024-04-05 | 0 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2024-04-05 | 1 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2024-04-05 | 2 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 2024-04-05 | 3 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 2024-04-05 | 4 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
df.reset_index(inplace=True)
df
| datetime | Unnamed: 0 | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-04-05 00:00:00 | 0 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 2024-04-05 00:00:00 | 1 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2 | 2024-04-05 00:00:00 | 2 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 3 | 2024-04-05 00:00:00 | 3 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 4 | 2024-04-05 00:00:00 | 4 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 62645 | 2025-04-12 21:00:00 | 62645 | 10T | 13.7291 | 100.7750 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
| 62646 | 2025-04-12 21:00:00 | 62646 | 11T | 13.7898 | 100.4486 | 3.05 | 3.48 | 0.25 | 1.57 | 6.27 | 149.25 |
| 62647 | 2025-04-12 21:00:00 | 62647 | 12T | 13.8225 | 100.5147 | 4.75 | 5.61 | 0.59 | 2.80 | 6.24 | 200.72 |
| 62648 | 2025-04-12 21:00:00 | 62648 | 15T | 13.7083 | 100.3728 | 4.27 | 4.74 | 0.23 | 1.94 | 1.04 | 172.77 |
| 62649 | 2025-04-12 21:00:00 | 62649 | 61T | 13.6796 | 100.6067 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
62650 rows × 11 columns
5. API request for historical weather data¶
# Import additional modules
import time
from datetime import datetime, timedelta
# OpenWeather API Key (Replace with your actual API key)
API_KEY = "45ec5c0e59ce5937572ea6e6629eabb3"
# List of monitoring stations with coordinates
stations = [
{'name': '3T', 'lat': 13.7563, 'lon': 100.5018},
{'name': '5T', 'lat': 13.7367, 'lon': 100.5231},
{'name': '10T', 'lat': 13.7291, 'lon': 100.7750},
{'name': '11T', 'lat': 13.7898, 'lon': 100.4486},
{'name': '12T', 'lat': 13.8225, 'lon': 100.5147},
{'name': '15T', 'lat': 13.7083, 'lon': 100.3728},
{'name': '61T', 'lat': 13.6796, 'lon': 100.6067},
]
# Define the time range (From 2024-04-01 to now)
start_date = datetime(2024, 4, 5)
end_date = datetime.now()
delta = timedelta(days=30) # Fetch 30 days at a time
# Base URL for OpenWeather History API
BASE_URL = "https://history.openweathermap.org/data/2.5/history/city"
# Data storage
all_data = []
# Fetch weather data for each station
for station in stations:
print(f"Fetching data for {station['name']}...")
temp_start_date = start_date # Keep track of moving start date
while temp_start_date < end_date:
# Convert to Unix timestamp
start_timestamp = int(temp_start_date.timestamp())
end_timestamp = int((temp_start_date + delta).timestamp())
# Construct API request URL
url = (
f"{BASE_URL}?lat={station['lat']}&lon={station['lon']}"
f"&type=hour&start={start_timestamp}&end={end_timestamp}&appid={API_KEY}"
)
# Send request
response = requests.get(url)
# Check response status
if response.status_code == 200:
data = response.json()
# Extract required fields
for entry in data.get("list", []):
record = {
"station": station["name"],
"timestamp": pd.to_datetime(entry["dt"], unit="s"),
"temp": entry["main"].get("temp", None),
"pressure": entry["main"].get("pressure", None),
"grnd_level": entry["main"].get("grnd_level", None),
"humidity": entry["main"].get("humidity", None),
"windspeed": entry["wind"].get("speed", None),
"winddeg": entry["wind"].get("deg", None),
"cloudall": entry["clouds"].get("all", None),
"weathermain": entry["weather"][0].get("main", None) if entry["weather"] else None
}
all_data.append(record)
print(f"Data retrieved for {temp_start_date} - {temp_start_date + delta}")
else:
print(f"API failed for {temp_start_date} - {temp_start_date + delta}. Status Code: {response.status_code}")
# Move to the next time window
temp_start_date += delta
# Avoid API rate limits
time.sleep(1)
Fetching data for 3T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 5T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 10T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 11T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 12T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 15T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00 Fetching data for 61T... API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400 Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00 Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00 Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00 Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00 Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00 Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00 Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00 Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00 Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00 Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00 Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00 Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
#Check data after being pulled throught API
all_data
[{'station': '3T',
'timestamp': Timestamp('2024-05-04 17:00:00'),
'temp': 305.44,
'pressure': 1006,
'grnd_level': None,
'humidity': 70,
'windspeed': 6.57,
'winddeg': 181,
'cloudall': 63,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 18:00:00'),
'temp': 304.42,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 6.04,
'winddeg': 179,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 19:00:00'),
'temp': 304.42,
'pressure': 1005,
'grnd_level': None,
'humidity': 69,
'windspeed': 5.53,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 20:00:00'),
'temp': 304.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 69,
'windspeed': 5.03,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 21:00:00'),
'temp': 304.52,
'pressure': 1005,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.84,
'winddeg': 168,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 22:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.65,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-04 23:00:00'),
'temp': 304.52,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 3.92,
'winddeg': 180,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 00:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 68,
'windspeed': 2.99,
'winddeg': 183,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 01:00:00'),
'temp': 305.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 62,
'windspeed': 2.71,
'winddeg': 185,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 02:00:00'),
'temp': 308.06,
'pressure': 1008,
'grnd_level': None,
'humidity': 52,
'windspeed': 2.93,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 03:00:00'),
'temp': 310.19,
'pressure': 1008,
'grnd_level': None,
'humidity': 43,
'windspeed': 2.7,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 04:00:00'),
'temp': 310.59,
'pressure': 1007,
'grnd_level': None,
'humidity': 39,
'windspeed': 3.31,
'winddeg': 170,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 05:00:00'),
'temp': 311.21,
'pressure': 1006,
'grnd_level': None,
'humidity': 38,
'windspeed': 4.48,
'winddeg': 168,
'cloudall': 71,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 06:00:00'),
'temp': 310.56,
'pressure': 1005,
'grnd_level': None,
'humidity': 39,
'windspeed': 5.25,
'winddeg': 175,
'cloudall': 75,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 07:00:00'),
'temp': 311.29,
'pressure': 1004,
'grnd_level': None,
'humidity': 44,
'windspeed': 6.54,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 08:00:00'),
'temp': 312.22,
'pressure': 1003,
'grnd_level': None,
'humidity': 45,
'windspeed': 6.33,
'winddeg': 179,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 09:00:00'),
'temp': 311.55,
'pressure': 1002,
'grnd_level': None,
'humidity': 44,
'windspeed': 5.57,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 10:00:00'),
'temp': 311.89,
'pressure': 1003,
'grnd_level': None,
'humidity': 43,
'windspeed': 7.83,
'winddeg': 152,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 11:00:00'),
'temp': 309.99,
'pressure': 1002,
'grnd_level': None,
'humidity': 48,
'windspeed': 6.86,
'winddeg': 162,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 12:00:00'),
'temp': 308.21,
'pressure': 1004,
'grnd_level': None,
'humidity': 53,
'windspeed': 6.84,
'winddeg': 169,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 13:00:00'),
'temp': 306.99,
'pressure': 1005,
'grnd_level': None,
'humidity': 61,
'windspeed': 7.25,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 14:00:00'),
'temp': 306.79,
'pressure': 1006,
'grnd_level': None,
'humidity': 64,
'windspeed': 6.7,
'winddeg': 180,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 15:00:00'),
'temp': 306.56,
'pressure': 1007,
'grnd_level': None,
'humidity': 65,
'windspeed': 6.39,
'winddeg': 177,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 16:00:00'),
'temp': 305.54,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 6.09,
'winddeg': 175,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 17:00:00'),
'temp': 305.44,
'pressure': 1007,
'grnd_level': None,
'humidity': 69,
'windspeed': 5.84,
'winddeg': 169,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 18:00:00'),
'temp': 305.34,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 5.48,
'winddeg': 176,
'cloudall': 36,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 19:00:00'),
'temp': 304.3,
'pressure': 1007,
'grnd_level': None,
'humidity': 51,
'windspeed': 5.27,
'winddeg': 174,
'cloudall': 3,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 20:00:00'),
'temp': 304.68,
'pressure': 1006,
'grnd_level': None,
'humidity': 53,
'windspeed': 5.33,
'winddeg': 171,
'cloudall': 7,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 21:00:00'),
'temp': 304.68,
'pressure': 1006,
'grnd_level': None,
'humidity': 55,
'windspeed': 5.04,
'winddeg': 175,
'cloudall': 7,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 22:00:00'),
'temp': 305.07,
'pressure': 1007,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.93,
'winddeg': 169,
'cloudall': 7,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-05 23:00:00'),
'temp': 305.07,
'pressure': 1007,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.89,
'winddeg': 170,
'cloudall': 7,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 00:00:00'),
'temp': 305.07,
'pressure': 1008,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.86,
'winddeg': 182,
'cloudall': 19,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 01:00:00'),
'temp': 305.01,
'pressure': 1009,
'grnd_level': None,
'humidity': 56,
'windspeed': 4.06,
'winddeg': 185,
'cloudall': 7,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 02:00:00'),
'temp': 307.7,
'pressure': 1009,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.99,
'winddeg': 187,
'cloudall': 3,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 03:00:00'),
'temp': 308.74,
'pressure': 1009,
'grnd_level': None,
'humidity': 57,
'windspeed': 4.29,
'winddeg': 186,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 04:00:00'),
'temp': 309.47,
'pressure': 1009,
'grnd_level': None,
'humidity': 53,
'windspeed': 4.54,
'winddeg': 184,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 05:00:00'),
'temp': 310.61,
'pressure': 1008,
'grnd_level': None,
'humidity': 47,
'windspeed': 4.69,
'winddeg': 185,
'cloudall': 1,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 06:00:00'),
'temp': 312.19,
'pressure': 1007,
'grnd_level': None,
'humidity': 40,
'windspeed': 5.11,
'winddeg': 185,
'cloudall': 3,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 07:00:00'),
'temp': 311.37,
'pressure': 1005,
'grnd_level': None,
'humidity': 39,
'windspeed': 5.49,
'winddeg': 184,
'cloudall': 21,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 08:00:00'),
'temp': 312.01,
'pressure': 1004,
'grnd_level': None,
'humidity': 38,
'windspeed': 6.02,
'winddeg': 173,
'cloudall': 38,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 09:00:00'),
'temp': 310.65,
'pressure': 1004,
'grnd_level': None,
'humidity': 42,
'windspeed': 6.54,
'winddeg': 162,
'cloudall': 55,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 10:00:00'),
'temp': 311.22,
'pressure': 1003,
'grnd_level': None,
'humidity': 40,
'windspeed': 5.6,
'winddeg': 173,
'cloudall': 44,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 11:00:00'),
'temp': 310.17,
'pressure': 1005,
'grnd_level': None,
'humidity': 41,
'windspeed': 6.44,
'winddeg': 177,
'cloudall': 51,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 12:00:00'),
'temp': 305.79,
'pressure': 1007,
'grnd_level': None,
'humidity': 45,
'windspeed': 6.94,
'winddeg': 181,
'cloudall': 33,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 13:00:00'),
'temp': 305.42,
'pressure': 1008,
'grnd_level': None,
'humidity': 49,
'windspeed': 6.45,
'winddeg': 157,
'cloudall': 37,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 14:00:00'),
'temp': 305.42,
'pressure': 1008,
'grnd_level': None,
'humidity': 50,
'windspeed': 6.25,
'winddeg': 140,
'cloudall': 32,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 15:00:00'),
'temp': 305.24,
'pressure': 1009,
'grnd_level': None,
'humidity': 50,
'windspeed': 4.94,
'winddeg': 131,
'cloudall': 23,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 16:00:00'),
'temp': 305.34,
'pressure': 1008,
'grnd_level': None,
'humidity': 52,
'windspeed': 4.92,
'winddeg': 173,
'cloudall': 19,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 17:00:00'),
'temp': 305.34,
'pressure': 1008,
'grnd_level': None,
'humidity': 54,
'windspeed': 5.56,
'winddeg': 177,
'cloudall': 16,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 18:00:00'),
'temp': 305.3,
'pressure': 1008,
'grnd_level': None,
'humidity': 55,
'windspeed': 5.35,
'winddeg': 177,
'cloudall': 16,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 19:00:00'),
'temp': 305.13,
'pressure': 1008,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.9,
'winddeg': 184,
'cloudall': 3,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 20:00:00'),
'temp': 305.07,
'pressure': 1007,
'grnd_level': None,
'humidity': 58,
'windspeed': 4.76,
'winddeg': 187,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 21:00:00'),
'temp': 304.63,
'pressure': 1008,
'grnd_level': None,
'humidity': 57,
'windspeed': 3.88,
'winddeg': 187,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 22:00:00'),
'temp': 304.63,
'pressure': 1009,
'grnd_level': None,
'humidity': 57,
'windspeed': 3.45,
'winddeg': 176,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-06 23:00:00'),
'temp': 304.41,
'pressure': 1009,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.47,
'winddeg': 180,
'cloudall': 1,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 00:00:00'),
'temp': 304.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.56,
'winddeg': 185,
'cloudall': 14,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 01:00:00'),
'temp': 305.35,
'pressure': 1011,
'grnd_level': None,
'humidity': 61,
'windspeed': 3.32,
'winddeg': 187,
'cloudall': 94,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 02:00:00'),
'temp': 304.49,
'pressure': 1011,
'grnd_level': None,
'humidity': 67,
'windspeed': 3.37,
'winddeg': 204,
'cloudall': 96,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 03:00:00'),
'temp': 303.37,
'pressure': 1011,
'grnd_level': None,
'humidity': 63,
'windspeed': 3.05,
'winddeg': 195,
'cloudall': 89,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 04:00:00'),
'temp': 303.96,
'pressure': 1011,
'grnd_level': None,
'humidity': 59,
'windspeed': 5.34,
'winddeg': 181,
'cloudall': 90,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 05:00:00'),
'temp': 303.68,
'pressure': 1011,
'grnd_level': None,
'humidity': 62,
'windspeed': 6.58,
'winddeg': 180,
'cloudall': 87,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 06:00:00'),
'temp': 303.3,
'pressure': 1010,
'grnd_level': None,
'humidity': 62,
'windspeed': 6.48,
'winddeg': 179,
'cloudall': 84,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 07:00:00'),
'temp': 303.56,
'pressure': 1009,
'grnd_level': None,
'humidity': 63,
'windspeed': 5.06,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 08:00:00'),
'temp': 303.14,
'pressure': 1008,
'grnd_level': None,
'humidity': 74,
'windspeed': 4.54,
'winddeg': 179,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 09:00:00'),
'temp': 303.1,
'pressure': 1009,
'grnd_level': None,
'humidity': 79,
'windspeed': 4.4,
'winddeg': 199,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 10:00:00'),
'temp': 302.85,
'pressure': 1009,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.88,
'winddeg': 165,
'cloudall': 95,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 11:00:00'),
'temp': 302.69,
'pressure': 1009,
'grnd_level': None,
'humidity': 79,
'windspeed': 4.82,
'winddeg': 155,
'cloudall': 95,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 12:00:00'),
'temp': 302.81,
'pressure': 1011,
'grnd_level': None,
'humidity': 99,
'windspeed': 4.26,
'winddeg': 136,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 13:00:00'),
'temp': 302.29,
'pressure': 1011,
'grnd_level': None,
'humidity': 99,
'windspeed': 3.08,
'winddeg': 145,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 14:00:00'),
'temp': 301.56,
'pressure': 1011,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.9,
'winddeg': 162,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 15:00:00'),
'temp': 301.78,
'pressure': 1011,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.18,
'winddeg': 160,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 16:00:00'),
'temp': 301.77,
'pressure': 1010,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.38,
'winddeg': 149,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 17:00:00'),
'temp': 301.79,
'pressure': 1010,
'grnd_level': None,
'humidity': 66,
'windspeed': 1.7,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 18:00:00'),
'temp': 301.16,
'pressure': 1010,
'grnd_level': None,
'humidity': 66,
'windspeed': 1.92,
'winddeg': 147,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 19:00:00'),
'temp': 301.06,
'pressure': 1009,
'grnd_level': None,
'humidity': 68,
'windspeed': 1.64,
'winddeg': 162,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 20:00:00'),
'temp': 301.05,
'pressure': 1008,
'grnd_level': None,
'humidity': 69,
'windspeed': 1.23,
'winddeg': 183,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 21:00:00'),
'temp': 301.55,
'pressure': 1009,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.04,
'winddeg': 203,
'cloudall': 91,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 22:00:00'),
'temp': 301.63,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 0.5,
'winddeg': 200,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-07 23:00:00'),
'temp': 301.44,
'pressure': 1009,
'grnd_level': None,
'humidity': 73,
'windspeed': 0.56,
'winddeg': 74,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 00:00:00'),
'temp': 301.11,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.02,
'winddeg': 57,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 01:00:00'),
'temp': 302.78,
'pressure': 1011,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.96,
'winddeg': 63,
'cloudall': 84,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 02:00:00'),
'temp': 303.45,
'pressure': 1011,
'grnd_level': None,
'humidity': 65,
'windspeed': 1.17,
'winddeg': 48,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 03:00:00'),
'temp': 305.63,
'pressure': 1011,
'grnd_level': None,
'humidity': 63,
'windspeed': 0.96,
'winddeg': 56,
'cloudall': 91,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 04:00:00'),
'temp': 306.89,
'pressure': 1011,
'grnd_level': None,
'humidity': 58,
'windspeed': 0.81,
'winddeg': 120,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 05:00:00'),
'temp': 308.3,
'pressure': 1010,
'grnd_level': None,
'humidity': 48,
'windspeed': 1.55,
'winddeg': 149,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 06:00:00'),
'temp': 310.27,
'pressure': 1008,
'grnd_level': None,
'humidity': 42,
'windspeed': 1.33,
'winddeg': 153,
'cloudall': 80,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 07:00:00'),
'temp': 309.54,
'pressure': 1007,
'grnd_level': None,
'humidity': 33,
'windspeed': 2.1,
'winddeg': 184,
'cloudall': 69,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 08:00:00'),
'temp': 311.18,
'pressure': 1006,
'grnd_level': None,
'humidity': 39,
'windspeed': 3.46,
'winddeg': 195,
'cloudall': 73,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 09:00:00'),
'temp': 309.61,
'pressure': 1005,
'grnd_level': None,
'humidity': 43,
'windspeed': 4.73,
'winddeg': 191,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 10:00:00'),
'temp': 309.51,
'pressure': 1005,
'grnd_level': None,
'humidity': 45,
'windspeed': 5.96,
'winddeg': 185,
'cloudall': 73,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 11:00:00'),
'temp': 309.07,
'pressure': 1006,
'grnd_level': None,
'humidity': 41,
'windspeed': 5.8,
'winddeg': 178,
'cloudall': 62,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 12:00:00'),
'temp': 307.27,
'pressure': 1007,
'grnd_level': None,
'humidity': 43,
'windspeed': 4.69,
'winddeg': 181,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 13:00:00'),
'temp': 307.32,
'pressure': 1008,
'grnd_level': None,
'humidity': 42,
'windspeed': 4.68,
'winddeg': 189,
'cloudall': 19,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 14:00:00'),
'temp': 306.95,
'pressure': 1008,
'grnd_level': None,
'humidity': 44,
'windspeed': 5.5,
'winddeg': 193,
'cloudall': 30,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 15:00:00'),
'temp': 305.97,
'pressure': 1009,
'grnd_level': None,
'humidity': 41,
'windspeed': 5.53,
'winddeg': 194,
'cloudall': 43,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 16:00:00'),
'temp': 304.19,
'pressure': 1009,
'grnd_level': None,
'humidity': 62,
'windspeed': 5.39,
'winddeg': 192,
'cloudall': 50,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 17:00:00'),
'temp': 305.97,
'pressure': 1009,
'grnd_level': None,
'humidity': 42,
'windspeed': 5.28,
'winddeg': 189,
'cloudall': 56,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 18:00:00'),
'temp': 302.98,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.9,
'winddeg': 191,
'cloudall': 63,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 19:00:00'),
'temp': 304.86,
'pressure': 1007,
'grnd_level': None,
'humidity': 59,
'windspeed': 4.52,
'winddeg': 192,
'cloudall': 55,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 20:00:00'),
'temp': 302.58,
'pressure': 1007,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.81,
'winddeg': 188,
'cloudall': 63,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 21:00:00'),
'temp': 304.25,
'pressure': 1008,
'grnd_level': None,
'humidity': 63,
'windspeed': 3.4,
'winddeg': 183,
'cloudall': 73,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 22:00:00'),
'temp': 304.19,
'pressure': 1008,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.42,
'winddeg': 178,
'cloudall': 79,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-08 23:00:00'),
'temp': 304.19,
'pressure': 1008,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.24,
'winddeg': 178,
'cloudall': 82,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 00:00:00'),
'temp': 303.98,
'pressure': 1009,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.37,
'winddeg': 188,
'cloudall': 73,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 01:00:00'),
'temp': 305.75,
'pressure': 1010,
'grnd_level': None,
'humidity': 62,
'windspeed': 3.42,
'winddeg': 183,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 02:00:00'),
'temp': 306.31,
'pressure': 1010,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.5,
'winddeg': 184,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 03:00:00'),
'temp': 306.78,
'pressure': 1010,
'grnd_level': None,
'humidity': 66,
'windspeed': 3.45,
'winddeg': 192,
'cloudall': 60,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 04:00:00'),
'temp': 307.27,
'pressure': 1010,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.84,
'winddeg': 184,
'cloudall': 49,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 05:00:00'),
'temp': 308.88,
'pressure': 1009,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.36,
'winddeg': 178,
'cloudall': 42,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 06:00:00'),
'temp': 309.88,
'pressure': 1007,
'grnd_level': None,
'humidity': 56,
'windspeed': 4.5,
'winddeg': 173,
'cloudall': 40,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 07:00:00'),
'temp': 309.3,
'pressure': 1006,
'grnd_level': None,
'humidity': 57,
'windspeed': 5.65,
'winddeg': 173,
'cloudall': 84,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 08:00:00'),
'temp': 307.91,
'pressure': 1006,
'grnd_level': None,
'humidity': 57,
'windspeed': 5.44,
'winddeg': 175,
'cloudall': 82,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 09:00:00'),
'temp': 308.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 54,
'windspeed': 5.53,
'winddeg': 175,
'cloudall': 79,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 10:00:00'),
'temp': 307.44,
'pressure': 1005,
'grnd_level': None,
'humidity': 54,
'windspeed': 6.39,
'winddeg': 172,
'cloudall': 62,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 11:00:00'),
'temp': 306.72,
'pressure': 1005,
'grnd_level': None,
'humidity': 62,
'windspeed': 6.28,
'winddeg': 175,
'cloudall': 51,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 12:00:00'),
'temp': 306.39,
'pressure': 1006,
'grnd_level': None,
'humidity': 61,
'windspeed': 6.38,
'winddeg': 179,
'cloudall': 43,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 13:00:00'),
'temp': 305.47,
'pressure': 1008,
'grnd_level': None,
'humidity': 57,
'windspeed': 5.12,
'winddeg': 184,
'cloudall': 2,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 14:00:00'),
'temp': 305.34,
'pressure': 1009,
'grnd_level': None,
'humidity': 58,
'windspeed': 4.4,
'winddeg': 183,
'cloudall': 5,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 15:00:00'),
'temp': 305.1,
'pressure': 1010,
'grnd_level': None,
'humidity': 59,
'windspeed': 4.44,
'winddeg': 187,
'cloudall': 9,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 16:00:00'),
'temp': 304.56,
'pressure': 1010,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.8,
'winddeg': 184,
'cloudall': 26,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 17:00:00'),
'temp': 305.03,
'pressure': 1009,
'grnd_level': None,
'humidity': 59,
'windspeed': 5.09,
'winddeg': 181,
'cloudall': 41,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 18:00:00'),
'temp': 304.03,
'pressure': 1008,
'grnd_level': None,
'humidity': 59,
'windspeed': 4.01,
'winddeg': 178,
'cloudall': 69,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 19:00:00'),
'temp': 304.58,
'pressure': 1008,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.5,
'winddeg': 179,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 20:00:00'),
'temp': 304.13,
'pressure': 1008,
'grnd_level': None,
'humidity': 62,
'windspeed': 2.87,
'winddeg': 201,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 21:00:00'),
'temp': 304.06,
'pressure': 1008,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.46,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 22:00:00'),
'temp': 303.71,
'pressure': 1008,
'grnd_level': None,
'humidity': 66,
'windspeed': 2.19,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-09 23:00:00'),
'temp': 303.16,
'pressure': 1009,
'grnd_level': None,
'humidity': 66,
'windspeed': 1.91,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 00:00:00'),
'temp': 304.24,
'pressure': 1009,
'grnd_level': None,
'humidity': 67,
'windspeed': 1.77,
'winddeg': 223,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 01:00:00'),
'temp': 304.61,
'pressure': 1010,
'grnd_level': None,
'humidity': 66,
'windspeed': 1.5,
'winddeg': 207,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 02:00:00'),
'temp': 305.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 59,
'windspeed': 1.49,
'winddeg': 180,
'cloudall': 63,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 03:00:00'),
'temp': 306.16,
'pressure': 1010,
'grnd_level': None,
'humidity': 57,
'windspeed': 2.41,
'winddeg': 173,
'cloudall': 52,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 04:00:00'),
'temp': 306.97,
'pressure': 1010,
'grnd_level': None,
'humidity': 52,
'windspeed': 3.22,
'winddeg': 176,
'cloudall': 57,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 05:00:00'),
'temp': 308.37,
'pressure': 1009,
'grnd_level': None,
'humidity': 50,
'windspeed': 4.57,
'winddeg': 180,
'cloudall': 58,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 06:00:00'),
'temp': 310.1,
'pressure': 1008,
'grnd_level': None,
'humidity': 48,
'windspeed': 5.33,
'winddeg': 179,
'cloudall': 55,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 07:00:00'),
'temp': 308.61,
'pressure': 1007,
'grnd_level': None,
'humidity': 48,
'windspeed': 6.23,
'winddeg': 183,
'cloudall': 82,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 08:00:00'),
'temp': 309.54,
'pressure': 1007,
'grnd_level': None,
'humidity': 43,
'windspeed': 6.24,
'winddeg': 180,
'cloudall': 77,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 09:00:00'),
'temp': 308.5,
'pressure': 1006,
'grnd_level': None,
'humidity': 49,
'windspeed': 6.32,
'winddeg': 175,
'cloudall': 84,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 10:00:00'),
'temp': 308.28,
'pressure': 1006,
'grnd_level': None,
'humidity': 55,
'windspeed': 6.74,
'winddeg': 184,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 11:00:00'),
'temp': 306.03,
'pressure': 1005,
'grnd_level': None,
'humidity': 44,
'windspeed': 6.87,
'winddeg': 185,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 12:00:00'),
'temp': 304.87,
'pressure': 1006,
'grnd_level': None,
'humidity': 41,
'windspeed': 6.17,
'winddeg': 183,
'cloudall': 77,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 13:00:00'),
'temp': 304,
'pressure': 1007,
'grnd_level': None,
'humidity': 49,
'windspeed': 5.68,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 14:00:00'),
'temp': 304.04,
'pressure': 1008,
'grnd_level': None,
'humidity': 45,
'windspeed': 4.62,
'winddeg': 201,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 15:00:00'),
'temp': 303.98,
'pressure': 1009,
'grnd_level': None,
'humidity': 46,
'windspeed': 5.04,
'winddeg': 190,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 16:00:00'),
'temp': 305.59,
'pressure': 1010,
'grnd_level': None,
'humidity': 47,
'windspeed': 3.78,
'winddeg': 204,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 17:00:00'),
'temp': 304.79,
'pressure': 1010,
'grnd_level': None,
'humidity': 44,
'windspeed': 2.3,
'winddeg': 212,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 18:00:00'),
'temp': 304.22,
'pressure': 1009,
'grnd_level': None,
'humidity': 47,
'windspeed': 2.35,
'winddeg': 218,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 19:00:00'),
'temp': 302.21,
'pressure': 1009,
'grnd_level': None,
'humidity': 44,
'windspeed': 1.93,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 20:00:00'),
'temp': 302.5,
'pressure': 1008,
'grnd_level': None,
'humidity': 47,
'windspeed': 1.79,
'winddeg': 240,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 21:00:00'),
'temp': 303.95,
'pressure': 1008,
'grnd_level': None,
'humidity': 63,
'windspeed': 1.4,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 22:00:00'),
'temp': 304.38,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 0.61,
'winddeg': 242,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-10 23:00:00'),
'temp': 304.36,
'pressure': 1010,
'grnd_level': None,
'humidity': 72,
'windspeed': 1.36,
'winddeg': 208,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 00:00:00'),
'temp': 304.26,
'pressure': 1011,
'grnd_level': None,
'humidity': 55,
'windspeed': 1.13,
'winddeg': 18,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 01:00:00'),
'temp': 305.03,
'pressure': 1012,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.05,
'winddeg': 348,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 02:00:00'),
'temp': 305.86,
'pressure': 1012,
'grnd_level': None,
'humidity': 66,
'windspeed': 0.37,
'winddeg': 6,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 03:00:00'),
'temp': 306.71,
'pressure': 1012,
'grnd_level': None,
'humidity': 61,
'windspeed': 1.48,
'winddeg': 89,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 04:00:00'),
'temp': 307.7,
'pressure': 1011,
'grnd_level': None,
'humidity': 61,
'windspeed': 1.98,
'winddeg': 95,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 05:00:00'),
'temp': 307.38,
'pressure': 1010,
'grnd_level': None,
'humidity': 55,
'windspeed': 2.52,
'winddeg': 112,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 06:00:00'),
'temp': 307.25,
'pressure': 1009,
'grnd_level': None,
'humidity': 59,
'windspeed': 2.48,
'winddeg': 107,
'cloudall': 98,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 07:00:00'),
'temp': 306.18,
'pressure': 1008,
'grnd_level': None,
'humidity': 59,
'windspeed': 2.46,
'winddeg': 126,
'cloudall': 80,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 08:00:00'),
'temp': 306.87,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 2.53,
'winddeg': 149,
'cloudall': 82,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 09:00:00'),
'temp': 308,
'pressure': 1006,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.68,
'winddeg': 184,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 10:00:00'),
'temp': 308.12,
'pressure': 1006,
'grnd_level': None,
'humidity': 56,
'windspeed': 4.95,
'winddeg': 187,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 11:00:00'),
'temp': 308.04,
'pressure': 1008,
'grnd_level': None,
'humidity': 59,
'windspeed': 5.21,
'winddeg': 211,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 12:00:00'),
'temp': 306.72,
'pressure': 1009,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.99,
'winddeg': 168,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 13:00:00'),
'temp': 305.97,
'pressure': 1009,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.67,
'winddeg': 185,
'cloudall': 98,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 14:00:00'),
'temp': 306.26,
'pressure': 1010,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.62,
'winddeg': 194,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 15:00:00'),
'temp': 306.03,
'pressure': 1011,
'grnd_level': None,
'humidity': 63,
'windspeed': 3.32,
'winddeg': 199,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 16:00:00'),
'temp': 306.03,
'pressure': 1011,
'grnd_level': None,
'humidity': 65,
'windspeed': 2.76,
'winddeg': 201,
'cloudall': 83,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-05-11 17:00:00'),
'temp': 305.73,
'pressure': 1010,
'grnd_level': None,
'humidity': 55,
'windspeed': 3,
'winddeg': 193,
'cloudall': 80,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 17:00:00'),
'temp': 301.92,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.57,
'winddeg': 269,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 18:00:00'),
'temp': 301.9,
'pressure': 1009,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.23,
'winddeg': 267,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 19:00:00'),
'temp': 301.29,
'pressure': 1008,
'grnd_level': None,
'humidity': 93,
'windspeed': 2.18,
'winddeg': 275,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 20:00:00'),
'temp': 300.83,
'pressure': 1008,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.1,
'winddeg': 264,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 21:00:00'),
'temp': 301.29,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 1.74,
'winddeg': 259,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 22:00:00'),
'temp': 300.67,
'pressure': 1008,
'grnd_level': None,
'humidity': 93,
'windspeed': 1.65,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-03 23:00:00'),
'temp': 300.65,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.33,
'winddeg': 241,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 00:00:00'),
'temp': 302.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 94,
'windspeed': 1.88,
'winddeg': 224,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 01:00:00'),
'temp': 303.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 62,
'windspeed': 2.41,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 02:00:00'),
'temp': 304.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 59,
'windspeed': 2.84,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 03:00:00'),
'temp': 306.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 57,
'windspeed': 3.17,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 04:00:00'),
'temp': 306.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.63,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 05:00:00'),
'temp': 307.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 59,
'windspeed': 3.57,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 06:00:00'),
'temp': 308.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 61,
'windspeed': 2.98,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 07:00:00'),
'temp': 308.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 62,
'windspeed': 3.11,
'winddeg': 246,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 08:00:00'),
'temp': 308.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 62,
'windspeed': 3,
'winddeg': 249,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 09:00:00'),
'temp': 308.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.39,
'winddeg': 257,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 10:00:00'),
'temp': 308.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.98,
'winddeg': 262,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 11:00:00'),
'temp': 308.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 2.52,
'winddeg': 260,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 12:00:00'),
'temp': 305.52,
'pressure': 1007,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.59,
'winddeg': 285,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 13:00:00'),
'temp': 304.98,
'pressure': 1008,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.95,
'winddeg': 277,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 14:00:00'),
'temp': 304.36,
'pressure': 1009,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.93,
'winddeg': 276,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 15:00:00'),
'temp': 303.91,
'pressure': 1009,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.71,
'winddeg': 277,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 16:00:00'),
'temp': 302.79,
'pressure': 1009,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.59,
'winddeg': 286,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 17:00:00'),
'temp': 303.23,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.37,
'winddeg': 272,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 18:00:00'),
'temp': 303.21,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.97,
'winddeg': 254,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 19:00:00'),
'temp': 302.55,
'pressure': 1008,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.71,
'winddeg': 253,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 20:00:00'),
'temp': 302.29,
'pressure': 1007,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.35,
'winddeg': 253,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 21:00:00'),
'temp': 301.96,
'pressure': 1007,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.68,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 22:00:00'),
'temp': 301.52,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.61,
'winddeg': 246,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-04 23:00:00'),
'temp': 301.52,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 1.49,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 00:00:00'),
'temp': 302,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.53,
'winddeg': 248,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 01:00:00'),
'temp': 304.3,
'pressure': 1009,
'grnd_level': None,
'humidity': 79,
'windspeed': 1.55,
'winddeg': 255,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 02:00:00'),
'temp': 303.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 67,
'windspeed': 1.79,
'winddeg': 266,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 03:00:00'),
'temp': 305.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 63,
'windspeed': 1.81,
'winddeg': 270,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 04:00:00'),
'temp': 305.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 51,
'windspeed': 2.13,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 05:00:00'),
'temp': 309.11,
'pressure': 1008,
'grnd_level': None,
'humidity': 61,
'windspeed': 3.06,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 06:00:00'),
'temp': 309.28,
'pressure': 1008,
'grnd_level': None,
'humidity': 60,
'windspeed': 5.65,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 07:00:00'),
'temp': 308.53,
'pressure': 1007,
'grnd_level': None,
'humidity': 66,
'windspeed': 4.53,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 08:00:00'),
'temp': 307.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 47,
'windspeed': 4.54,
'winddeg': 233,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 09:00:00'),
'temp': 307.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 50,
'windspeed': 5.93,
'winddeg': 252,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 10:00:00'),
'temp': 306.54,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 6.09,
'winddeg': 259,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 11:00:00'),
'temp': 305,
'pressure': 1007,
'grnd_level': None,
'humidity': 79,
'windspeed': 6.25,
'winddeg': 259,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 12:00:00'),
'temp': 303.91,
'pressure': 1008,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.45,
'winddeg': 235,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 13:00:00'),
'temp': 302.66,
'pressure': 1009,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.66,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 14:00:00'),
'temp': 302.3,
'pressure': 1010,
'grnd_level': None,
'humidity': 72,
'windspeed': 2.76,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 15:00:00'),
'temp': 303.24,
'pressure': 1010,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.94,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 16:00:00'),
'temp': 303.29,
'pressure': 1010,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.65,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 17:00:00'),
'temp': 302.83,
'pressure': 1010,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.67,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 18:00:00'),
'temp': 302.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.2,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 19:00:00'),
'temp': 301.74,
'pressure': 1009,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.92,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 20:00:00'),
'temp': 301.13,
'pressure': 1009,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.88,
'winddeg': 243,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 21:00:00'),
'temp': 300.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.69,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 22:00:00'),
'temp': 299.58,
'pressure': 1009,
'grnd_level': None,
'humidity': 93,
'windspeed': 2.26,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-05 23:00:00'),
'temp': 299.56,
'pressure': 1009,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.12,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 00:00:00'),
'temp': 303.67,
'pressure': 1010,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.5,
'winddeg': 217,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 01:00:00'),
'temp': 303.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.06,
'winddeg': 210,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 02:00:00'),
'temp': 304.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 55,
'windspeed': 3.2,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 03:00:00'),
'temp': 305.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 51,
'windspeed': 3.27,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 04:00:00'),
'temp': 305.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 49,
'windspeed': 3.48,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 05:00:00'),
'temp': 305.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 48,
'windspeed': 3.94,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 06:00:00'),
'temp': 308.8,
'pressure': 1008,
'grnd_level': None,
'humidity': 63,
'windspeed': 4.18,
'winddeg': 194,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 07:00:00'),
'temp': 308.37,
'pressure': 1007,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.78,
'winddeg': 190,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 08:00:00'),
'temp': 308.37,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 2.52,
'winddeg': 192,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 09:00:00'),
'temp': 306.84,
'pressure': 1006,
'grnd_level': None,
'humidity': 71,
'windspeed': 1.98,
'winddeg': 201,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 10:00:00'),
'temp': 306.36,
'pressure': 1006,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.24,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 11:00:00'),
'temp': 304.9,
'pressure': 1006,
'grnd_level': None,
'humidity': 77,
'windspeed': 4.68,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 12:00:00'),
'temp': 304.04,
'pressure': 1008,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.86,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 13:00:00'),
'temp': 303.43,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.66,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 14:00:00'),
'temp': 303.29,
'pressure': 1009,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.38,
'winddeg': 188,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 15:00:00'),
'temp': 301.01,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.63,
'winddeg': 194,
'cloudall': 78,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 16:00:00'),
'temp': 301.19,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.83,
'winddeg': 212,
'cloudall': 80,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 17:00:00'),
'temp': 299.92,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.84,
'winddeg': 229,
'cloudall': 84,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 18:00:00'),
'temp': 300.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.8,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 19:00:00'),
'temp': 300.22,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.8,
'winddeg': 231,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 20:00:00'),
'temp': 299.76,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.49,
'winddeg': 229,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 21:00:00'),
'temp': 299.74,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.43,
'winddeg': 237,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 22:00:00'),
'temp': 299.13,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.1,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-06 23:00:00'),
'temp': 299.11,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.06,
'winddeg': 230,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 00:00:00'),
'temp': 301.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 69,
'windspeed': 2.32,
'winddeg': 223,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 01:00:00'),
'temp': 303.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 64,
'windspeed': 3,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 02:00:00'),
'temp': 304.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.12,
'winddeg': 217,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 03:00:00'),
'temp': 305.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 55,
'windspeed': 3.52,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 04:00:00'),
'temp': 306.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 50,
'windspeed': 3.97,
'winddeg': 247,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 05:00:00'),
'temp': 309.04,
'pressure': 1008,
'grnd_level': None,
'humidity': 46,
'windspeed': 3.98,
'winddeg': 248,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 06:00:00'),
'temp': 306.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 51,
'windspeed': 4.06,
'winddeg': 226,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 07:00:00'),
'temp': 306.11,
'pressure': 1006,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.49,
'winddeg': 217,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 08:00:00'),
'temp': 307.58,
'pressure': 1005,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.64,
'winddeg': 218,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 09:00:00'),
'temp': 305.2,
'pressure': 1005,
'grnd_level': None,
'humidity': 52,
'windspeed': 4.61,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 10:00:00'),
'temp': 307.27,
'pressure': 1005,
'grnd_level': None,
'humidity': 69,
'windspeed': 3.88,
'winddeg': 253,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 11:00:00'),
'temp': 305.29,
'pressure': 1005,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.4,
'winddeg': 259,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 12:00:00'),
'temp': 303.93,
'pressure': 1006,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.74,
'winddeg': 265,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 13:00:00'),
'temp': 303.91,
'pressure': 1006,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.74,
'winddeg': 249,
'cloudall': 54,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 14:00:00'),
'temp': 303.43,
'pressure': 1007,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.7,
'winddeg': 242,
'cloudall': 39,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 15:00:00'),
'temp': 302.64,
'pressure': 1008,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.03,
'winddeg': 249,
'cloudall': 58,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 16:00:00'),
'temp': 301.01,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 4.09,
'winddeg': 260,
'cloudall': 69,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 17:00:00'),
'temp': 300.83,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 4.04,
'winddeg': 257,
'cloudall': 75,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 18:00:00'),
'temp': 300.83,
'pressure': 1007,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.48,
'winddeg': 253,
'cloudall': 77,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 19:00:00'),
'temp': 300.67,
'pressure': 1006,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.28,
'winddeg': 249,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 20:00:00'),
'temp': 300.67,
'pressure': 1006,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.03,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 21:00:00'),
'temp': 300.22,
'pressure': 1006,
'grnd_level': None,
'humidity': 89,
'windspeed': 2.85,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 22:00:00'),
'temp': 300.2,
'pressure': 1006,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.74,
'winddeg': 219,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-07 23:00:00'),
'temp': 300.2,
'pressure': 1006,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.92,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 00:00:00'),
'temp': 301.64,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.24,
'winddeg': 231,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 01:00:00'),
'temp': 303.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 59,
'windspeed': 3.58,
'winddeg': 241,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 02:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 54,
'windspeed': 3.29,
'winddeg': 248,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 03:00:00'),
'temp': 307.5,
'pressure': 1008,
'grnd_level': None,
'humidity': 47,
'windspeed': 3.47,
'winddeg': 255,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 04:00:00'),
'temp': 309.17,
'pressure': 1007,
'grnd_level': None,
'humidity': 53,
'windspeed': 3.72,
'winddeg': 255,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 05:00:00'),
'temp': 309.28,
'pressure': 1006,
'grnd_level': None,
'humidity': 47,
'windspeed': 3.69,
'winddeg': 254,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 06:00:00'),
'temp': 309.54,
'pressure': 1005,
'grnd_level': None,
'humidity': 54,
'windspeed': 3.97,
'winddeg': 244,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 07:00:00'),
'temp': 309.46,
'pressure': 1004,
'grnd_level': None,
'humidity': 53,
'windspeed': 4.24,
'winddeg': 213,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 08:00:00'),
'temp': 306.99,
'pressure': 1003,
'grnd_level': None,
'humidity': 54,
'windspeed': 5.13,
'winddeg': 196,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 09:00:00'),
'temp': 306.99,
'pressure': 1003,
'grnd_level': None,
'humidity': 59,
'windspeed': 4.56,
'winddeg': 183,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 10:00:00'),
'temp': 307.02,
'pressure': 1003,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.9,
'winddeg': 198,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 11:00:00'),
'temp': 305.93,
'pressure': 1003,
'grnd_level': None,
'humidity': 66,
'windspeed': 2.77,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 12:00:00'),
'temp': 304.46,
'pressure': 1004,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.92,
'winddeg': 208,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 13:00:00'),
'temp': 303.93,
'pressure': 1005,
'grnd_level': None,
'humidity': 74,
'windspeed': 2.55,
'winddeg': 252,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 14:00:00'),
'temp': 303.31,
'pressure': 1006,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.09,
'winddeg': 266,
'cloudall': 83,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 15:00:00'),
'temp': 302.85,
'pressure': 1007,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.13,
'winddeg': 255,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 16:00:00'),
'temp': 302.83,
'pressure': 1007,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.79,
'winddeg': 249,
'cloudall': 83,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 17:00:00'),
'temp': 302.52,
'pressure': 1007,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.92,
'winddeg': 256,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 18:00:00'),
'temp': 301.57,
'pressure': 1006,
'grnd_level': None,
'humidity': 69,
'windspeed': 3.86,
'winddeg': 240,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 19:00:00'),
'temp': 301.29,
'pressure': 1005,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.95,
'winddeg': 245,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 20:00:00'),
'temp': 301.13,
'pressure': 1005,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.6,
'winddeg': 243,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 21:00:00'),
'temp': 301.58,
'pressure': 1004,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.5,
'winddeg': 245,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 22:00:00'),
'temp': 301.66,
'pressure': 1005,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.13,
'winddeg': 249,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-08 23:00:00'),
'temp': 301.59,
'pressure': 1005,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.77,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 00:00:00'),
'temp': 301.64,
'pressure': 1006,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.52,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 01:00:00'),
'temp': 301.89,
'pressure': 1006,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.9,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 02:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.61,
'winddeg': 228,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 03:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 68,
'windspeed': 3.58,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 04:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.22,
'winddeg': 224,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 05:00:00'),
'temp': 305.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.68,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 06:00:00'),
'temp': 305.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 63,
'windspeed': 5.04,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 07:00:00'),
'temp': 306.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.69,
'winddeg': 237,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 08:00:00'),
'temp': 306.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.02,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 09:00:00'),
'temp': 306.09,
'pressure': 1003,
'grnd_level': None,
'humidity': 56,
'windspeed': 6.44,
'winddeg': 230,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 10:00:00'),
'temp': 306.52,
'pressure': 1004,
'grnd_level': None,
'humidity': 73,
'windspeed': 5.1,
'winddeg': 246,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 11:00:00'),
'temp': 304.54,
'pressure': 1004,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.1,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 12:00:00'),
'temp': 303.75,
'pressure': 1005,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.6,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 13:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 63,
'windspeed': 3.22,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 14:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 60,
'windspeed': 3.92,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 15:00:00'),
'temp': 305.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 64,
'windspeed': 4.06,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 16:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.47,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 17:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 3.38,
'winddeg': 226,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 18:00:00'),
'temp': 303.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 67,
'windspeed': 3.05,
'winddeg': 226,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 19:00:00'),
'temp': 303.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.78,
'winddeg': 229,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 20:00:00'),
'temp': 303.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.3,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 21:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.97,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 22:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.39,
'winddeg': 226,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-09 23:00:00'),
'temp': 302.2,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.22,
'winddeg': 219,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 00:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.89,
'winddeg': 251,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 01:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.53,
'winddeg': 264,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 02:00:00'),
'temp': 303.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 75,
'windspeed': 5.33,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 03:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 77,
'windspeed': 5.25,
'winddeg': 240,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 04:00:00'),
'temp': 303.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 82,
'windspeed': 4.99,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 05:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.53,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 06:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 62,
'windspeed': 6.41,
'winddeg': 225,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 07:00:00'),
'temp': 304.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 64,
'windspeed': 6.41,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 08:00:00'),
'temp': 303.88,
'pressure': 1005,
'grnd_level': None,
'humidity': 65,
'windspeed': 6.63,
'winddeg': 241,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 09:00:00'),
'temp': 303.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 67,
'windspeed': 7.05,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 10:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 70,
'windspeed': 6.13,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 11:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 71,
'windspeed': 6.08,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 12:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.88,
'winddeg': 213,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 13:00:00'),
'temp': 303.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.93,
'winddeg': 202,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 14:00:00'),
'temp': 302.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 78,
'windspeed': 4.88,
'winddeg': 211,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 15:00:00'),
'temp': 303.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 78,
'windspeed': 4.34,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 16:00:00'),
'temp': 303.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.91,
'winddeg': 210,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-06-10 17:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.57,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 17:00:00'),
'temp': 300.45,
'pressure': 1009,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.23,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 18:00:00'),
'temp': 300.71,
'pressure': 1008,
'grnd_level': None,
'humidity': 96,
'windspeed': 2.18,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 19:00:00'),
'temp': 298.92,
'pressure': 1008,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.15,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 20:00:00'),
'temp': 298.62,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.04,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 21:00:00'),
'temp': 298.65,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.03,
'winddeg': 171,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 22:00:00'),
'temp': 298.46,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.19,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-03 23:00:00'),
'temp': 298.57,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.04,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 00:00:00'),
'temp': 299.41,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.5,
'winddeg': 178,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 01:00:00'),
'temp': 300.59,
'pressure': 1010,
'grnd_level': None,
'humidity': 97,
'windspeed': 2.52,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 02:00:00'),
'temp': 302.19,
'pressure': 1011,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.37,
'winddeg': 164,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 03:00:00'),
'temp': 301.35,
'pressure': 1011,
'grnd_level': None,
'humidity': 89,
'windspeed': 1.97,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 04:00:00'),
'temp': 302.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.13,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 05:00:00'),
'temp': 299.21,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.4,
'winddeg': 197,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 06:00:00'),
'temp': 299.24,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.45,
'winddeg': 205,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 07:00:00'),
'temp': 300.35,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 3.37,
'winddeg': 199,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 08:00:00'),
'temp': 301.41,
'pressure': 1008,
'grnd_level': None,
'humidity': 94,
'windspeed': 4.16,
'winddeg': 197,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 09:00:00'),
'temp': 302.14,
'pressure': 1007,
'grnd_level': None,
'humidity': 92,
'windspeed': 4.41,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 10:00:00'),
'temp': 302.51,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 4.33,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 11:00:00'),
'temp': 301.63,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 4.19,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 12:00:00'),
'temp': 301.12,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.23,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 13:00:00'),
'temp': 300.62,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.9,
'winddeg': 172,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 14:00:00'),
'temp': 300.62,
'pressure': 1009,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.59,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 15:00:00'),
'temp': 300.67,
'pressure': 1010,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.89,
'winddeg': 167,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 16:00:00'),
'temp': 300.15,
'pressure': 1010,
'grnd_level': None,
'humidity': 85,
'windspeed': 2.68,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 17:00:00'),
'temp': 298.85,
'pressure': 1010,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.78,
'winddeg': 178,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 18:00:00'),
'temp': 297.08,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 4.02,
'winddeg': 177,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 19:00:00'),
'temp': 296.63,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.93,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 20:00:00'),
'temp': 297,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.37,
'winddeg': 171,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 21:00:00'),
'temp': 297.14,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.68,
'winddeg': 204,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 22:00:00'),
'temp': 297.27,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.41,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-04 23:00:00'),
'temp': 297.22,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.4,
'winddeg': 221,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 00:00:00'),
'temp': 298.34,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.56,
'winddeg': 220,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 01:00:00'),
'temp': 299.21,
'pressure': 1009,
'grnd_level': None,
'humidity': 97,
'windspeed': 1.48,
'winddeg': 203,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 02:00:00'),
'temp': 301.1,
'pressure': 1009,
'grnd_level': None,
'humidity': 95,
'windspeed': 1.54,
'winddeg': 207,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 03:00:00'),
'temp': 302.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.32,
'winddeg': 184,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 04:00:00'),
'temp': 303.1,
'pressure': 1009,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.66,
'winddeg': 179,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 05:00:00'),
'temp': 303.97,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.35,
'winddeg': 177,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 06:00:00'),
'temp': 303.3,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.42,
'winddeg': 180,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 07:00:00'),
'temp': 303.32,
'pressure': 1006,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.91,
'winddeg': 180,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 08:00:00'),
'temp': 304.3,
'pressure': 1005,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.27,
'winddeg': 186,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 09:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 76,
'windspeed': 4.03,
'winddeg': 186,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 10:00:00'),
'temp': 303.34,
'pressure': 1004,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.66,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 11:00:00'),
'temp': 303.04,
'pressure': 1005,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.93,
'winddeg': 192,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 12:00:00'),
'temp': 301.85,
'pressure': 1005,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.03,
'winddeg': 189,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 13:00:00'),
'temp': 300.75,
'pressure': 1006,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.12,
'winddeg': 199,
'cloudall': 37,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 14:00:00'),
'temp': 300.38,
'pressure': 1007,
'grnd_level': None,
'humidity': 89,
'windspeed': 3.14,
'winddeg': 236,
'cloudall': 38,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 15:00:00'),
'temp': 299.62,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.97,
'winddeg': 249,
'cloudall': 54,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 16:00:00'),
'temp': 299.12,
'pressure': 1008,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.24,
'winddeg': 230,
'cloudall': 59,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 17:00:00'),
'temp': 299.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.45,
'winddeg': 236,
'cloudall': 67,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 18:00:00'),
'temp': 298.61,
'pressure': 1007,
'grnd_level': None,
'humidity': 95,
'windspeed': 1.64,
'winddeg': 237,
'cloudall': 61,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 19:00:00'),
'temp': 299.85,
'pressure': 1006,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.57,
'winddeg': 249,
'cloudall': 34,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 20:00:00'),
'temp': 298.46,
'pressure': 1005,
'grnd_level': None,
'humidity': 97,
'windspeed': 1.33,
'winddeg': 258,
'cloudall': 27,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 21:00:00'),
'temp': 298.33,
'pressure': 1005,
'grnd_level': None,
'humidity': 97,
'windspeed': 1.12,
'winddeg': 252,
'cloudall': 25,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 22:00:00'),
'temp': 298.33,
'pressure': 1006,
'grnd_level': None,
'humidity': 97,
'windspeed': 1.43,
'winddeg': 240,
'cloudall': 37,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-05 23:00:00'),
'temp': 298.84,
'pressure': 1006,
'grnd_level': None,
'humidity': 98,
'windspeed': 1.3,
'winddeg': 265,
'cloudall': 47,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 00:00:00'),
'temp': 300.25,
'pressure': 1007,
'grnd_level': None,
'humidity': 95,
'windspeed': 1.15,
'winddeg': 268,
'cloudall': 77,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 01:00:00'),
'temp': 301.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.39,
'winddeg': 278,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 02:00:00'),
'temp': 302.02,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.97,
'winddeg': 269,
'cloudall': 60,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 03:00:00'),
'temp': 303.49,
'pressure': 1007,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.54,
'winddeg': 263,
'cloudall': 73,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 04:00:00'),
'temp': 304.17,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 2.85,
'winddeg': 260,
'cloudall': 77,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 05:00:00'),
'temp': 305.25,
'pressure': 1006,
'grnd_level': None,
'humidity': 67,
'windspeed': 2.88,
'winddeg': 265,
'cloudall': 82,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 06:00:00'),
'temp': 306.31,
'pressure': 1005,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.34,
'winddeg': 242,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 07:00:00'),
'temp': 307.48,
'pressure': 1003,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.41,
'winddeg': 236,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 08:00:00'),
'temp': 305.81,
'pressure': 1003,
'grnd_level': None,
'humidity': 71,
'windspeed': 3.19,
'winddeg': 214,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 09:00:00'),
'temp': 306.29,
'pressure': 1002,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.03,
'winddeg': 195,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 10:00:00'),
'temp': 304.78,
'pressure': 1002,
'grnd_level': None,
'humidity': 76,
'windspeed': 4.48,
'winddeg': 184,
'cloudall': 85,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 11:00:00'),
'temp': 304.74,
'pressure': 1003,
'grnd_level': None,
'humidity': 79,
'windspeed': 5.11,
'winddeg': 189,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 12:00:00'),
'temp': 302.05,
'pressure': 1004,
'grnd_level': None,
'humidity': 84,
'windspeed': 4.14,
'winddeg': 177,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 13:00:00'),
'temp': 301.32,
'pressure': 1005,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.88,
'winddeg': 189,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 14:00:00'),
'temp': 300.81,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.84,
'winddeg': 197,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 15:00:00'),
'temp': 300.82,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.29,
'winddeg': 199,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 16:00:00'),
'temp': 301.26,
'pressure': 1007,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.43,
'winddeg': 196,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 17:00:00'),
'temp': 301.24,
'pressure': 1006,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.51,
'winddeg': 195,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 18:00:00'),
'temp': 300.67,
'pressure': 1006,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.23,
'winddeg': 189,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 19:00:00'),
'temp': 300.75,
'pressure': 1006,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.03,
'winddeg': 203,
'cloudall': 84,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 20:00:00'),
'temp': 300.3,
'pressure': 1005,
'grnd_level': None,
'humidity': 91,
'windspeed': 1.54,
'winddeg': 213,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 21:00:00'),
'temp': 300.94,
'pressure': 1005,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.56,
'winddeg': 246,
'cloudall': 70,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 22:00:00'),
'temp': 299.71,
'pressure': 1006,
'grnd_level': None,
'humidity': 92,
'windspeed': 1.65,
'winddeg': 262,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-06 23:00:00'),
'temp': 300.92,
'pressure': 1006,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.91,
'winddeg': 262,
'cloudall': 65,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 00:00:00'),
'temp': 301.31,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 1.72,
'winddeg': 272,
'cloudall': 80,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 01:00:00'),
'temp': 302.8,
'pressure': 1007,
'grnd_level': None,
'humidity': 71,
'windspeed': 1.77,
'winddeg': 273,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 02:00:00'),
'temp': 303.36,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.88,
'winddeg': 277,
'cloudall': 62,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 03:00:00'),
'temp': 303.71,
'pressure': 1007,
'grnd_level': None,
'humidity': 60,
'windspeed': 1.74,
'winddeg': 264,
'cloudall': 51,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 04:00:00'),
'temp': 305.47,
'pressure': 1007,
'grnd_level': None,
'humidity': 62,
'windspeed': 1.23,
'winddeg': 261,
'cloudall': 57,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 05:00:00'),
'temp': 306.33,
'pressure': 1006,
'grnd_level': None,
'humidity': 60,
'windspeed': 1.57,
'winddeg': 259,
'cloudall': 66,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 06:00:00'),
'temp': 306.86,
'pressure': 1005,
'grnd_level': None,
'humidity': 62,
'windspeed': 1.49,
'winddeg': 218,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 07:00:00'),
'temp': 307.21,
'pressure': 1004,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.12,
'winddeg': 191,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 08:00:00'),
'temp': 307.1,
'pressure': 1003,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.53,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 09:00:00'),
'temp': 306.16,
'pressure': 1003,
'grnd_level': None,
'humidity': 65,
'windspeed': 4.34,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 10:00:00'),
'temp': 305.73,
'pressure': 1003,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.47,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 11:00:00'),
'temp': 304.07,
'pressure': 1003,
'grnd_level': None,
'humidity': 75,
'windspeed': 3.88,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 12:00:00'),
'temp': 303.32,
'pressure': 1004,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.64,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 13:00:00'),
'temp': 302.81,
'pressure': 1006,
'grnd_level': None,
'humidity': 80,
'windspeed': 3.74,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 14:00:00'),
'temp': 302.73,
'pressure': 1006,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.66,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 15:00:00'),
'temp': 302.73,
'pressure': 1007,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.67,
'winddeg': 179,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 16:00:00'),
'temp': 302.23,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 3.65,
'winddeg': 174,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 17:00:00'),
'temp': 302.14,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 3.57,
'winddeg': 168,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 18:00:00'),
'temp': 302,
'pressure': 1006,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.28,
'winddeg': 163,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 19:00:00'),
'temp': 301.86,
'pressure': 1006,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.2,
'winddeg': 161,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 20:00:00'),
'temp': 301.05,
'pressure': 1005,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.94,
'winddeg': 160,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 21:00:00'),
'temp': 300.91,
'pressure': 1005,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.66,
'winddeg': 158,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 22:00:00'),
'temp': 300.31,
'pressure': 1005,
'grnd_level': None,
'humidity': 96,
'windspeed': 2.44,
'winddeg': 156,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-07 23:00:00'),
'temp': 300.17,
'pressure': 1006,
'grnd_level': None,
'humidity': 98,
'windspeed': 1.87,
'winddeg': 145,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 00:00:00'),
'temp': 300.66,
'pressure': 1007,
'grnd_level': None,
'humidity': 95,
'windspeed': 2.06,
'winddeg': 137,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 01:00:00'),
'temp': 302,
'pressure': 1007,
'grnd_level': None,
'humidity': 89,
'windspeed': 2.29,
'winddeg': 138,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 02:00:00'),
'temp': 302.3,
'pressure': 1007,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.66,
'winddeg': 140,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 03:00:00'),
'temp': 302.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.86,
'winddeg': 157,
'cloudall': 78,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 04:00:00'),
'temp': 305.03,
'pressure': 1007,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.03,
'winddeg': 161,
'cloudall': 66,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 05:00:00'),
'temp': 306.47,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.35,
'winddeg': 162,
'cloudall': 59,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 06:00:00'),
'temp': 305.57,
'pressure': 1005,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.77,
'winddeg': 179,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 07:00:00'),
'temp': 306.82,
'pressure': 1004,
'grnd_level': None,
'humidity': 79,
'windspeed': 4.02,
'winddeg': 174,
'cloudall': 98,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 08:00:00'),
'temp': 306.08,
'pressure': 1003,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.03,
'winddeg': 172,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 09:00:00'),
'temp': 305.68,
'pressure': 1003,
'grnd_level': None,
'humidity': 73,
'windspeed': 4.01,
'winddeg': 170,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 10:00:00'),
'temp': 305.21,
'pressure': 1003,
'grnd_level': None,
'humidity': 75,
'windspeed': 4.27,
'winddeg': 163,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 11:00:00'),
'temp': 304.06,
'pressure': 1004,
'grnd_level': None,
'humidity': 79,
'windspeed': 4.98,
'winddeg': 161,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 12:00:00'),
'temp': 303.31,
'pressure': 1005,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.47,
'winddeg': 159,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 13:00:00'),
'temp': 302.72,
'pressure': 1006,
'grnd_level': None,
'humidity': 84,
'windspeed': 4.56,
'winddeg': 167,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 14:00:00'),
'temp': 302.36,
'pressure': 1007,
'grnd_level': None,
'humidity': 86,
'windspeed': 4.94,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 15:00:00'),
'temp': 302.28,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 5.2,
'winddeg': 169,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 16:00:00'),
'temp': 302.41,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 5.01,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 17:00:00'),
'temp': 301.4,
'pressure': 1007,
'grnd_level': None,
'humidity': 89,
'windspeed': 4.56,
'winddeg': 177,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 18:00:00'),
'temp': 300.6,
'pressure': 1007,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.97,
'winddeg': 179,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 19:00:00'),
'temp': 300.43,
'pressure': 1007,
'grnd_level': None,
'humidity': 92,
'windspeed': 4.2,
'winddeg': 177,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 20:00:00'),
'temp': 300.3,
'pressure': 1006,
'grnd_level': None,
'humidity': 93,
'windspeed': 4.37,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 21:00:00'),
'temp': 300.15,
'pressure': 1006,
'grnd_level': None,
'humidity': 94,
'windspeed': 4.05,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 22:00:00'),
'temp': 301.35,
'pressure': 1006,
'grnd_level': None,
'humidity': 89,
'windspeed': 4.18,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-08 23:00:00'),
'temp': 301.33,
'pressure': 1007,
'grnd_level': None,
'humidity': 89,
'windspeed': 3.84,
'winddeg': 191,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 00:00:00'),
'temp': 301.33,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.33,
'winddeg': 181,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 01:00:00'),
'temp': 302.8,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.1,
'winddeg': 179,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 02:00:00'),
'temp': 303.05,
'pressure': 1009,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.47,
'winddeg': 179,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 03:00:00'),
'temp': 303.35,
'pressure': 1009,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.76,
'winddeg': 181,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 04:00:00'),
'temp': 304.92,
'pressure': 1009,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.7,
'winddeg': 183,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 05:00:00'),
'temp': 303.24,
'pressure': 1008,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.85,
'winddeg': 184,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 06:00:00'),
'temp': 304.35,
'pressure': 1007,
'grnd_level': None,
'humidity': 52,
'windspeed': 2.9,
'winddeg': 191,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 07:00:00'),
'temp': 306.94,
'pressure': 1006,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.16,
'winddeg': 178,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 08:00:00'),
'temp': 307.08,
'pressure': 1005,
'grnd_level': None,
'humidity': 74,
'windspeed': 3.75,
'winddeg': 166,
'cloudall': 98,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 09:00:00'),
'temp': 307.81,
'pressure': 1005,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.77,
'winddeg': 156,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 10:00:00'),
'temp': 306.79,
'pressure': 1005,
'grnd_level': None,
'humidity': 90,
'windspeed': 4.17,
'winddeg': 157,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 11:00:00'),
'temp': 304.73,
'pressure': 1005,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.57,
'winddeg': 164,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 12:00:00'),
'temp': 303.47,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.87,
'winddeg': 172,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 13:00:00'),
'temp': 303.1,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.65,
'winddeg': 181,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 14:00:00'),
'temp': 302.73,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.99,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 15:00:00'),
'temp': 302.36,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.62,
'winddeg': 181,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 16:00:00'),
'temp': 301.92,
'pressure': 1009,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.93,
'winddeg': 172,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 17:00:00'),
'temp': 301.05,
'pressure': 1009,
'grnd_level': None,
'humidity': 87,
'windspeed': 3.86,
'winddeg': 172,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 18:00:00'),
'temp': 300.25,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.14,
'winddeg': 157,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 19:00:00'),
'temp': 300.39,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.11,
'winddeg': 147,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 20:00:00'),
'temp': 300.38,
'pressure': 1008,
'grnd_level': None,
'humidity': 95,
'windspeed': 2.75,
'winddeg': 163,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 21:00:00'),
'temp': 300.3,
'pressure': 1008,
'grnd_level': None,
'humidity': 96,
'windspeed': 3.07,
'winddeg': 163,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 22:00:00'),
'temp': 300.02,
'pressure': 1008,
'grnd_level': None,
'humidity': 97,
'windspeed': 2.98,
'winddeg': 161,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-09 23:00:00'),
'temp': 300.31,
'pressure': 1008,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.45,
'winddeg': 158,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 00:00:00'),
'temp': 300.32,
'pressure': 1009,
'grnd_level': None,
'humidity': 96,
'windspeed': 2.36,
'winddeg': 149,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 01:00:00'),
'temp': 303.03,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.37,
'winddeg': 154,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 02:00:00'),
'temp': 302.63,
'pressure': 1010,
'grnd_level': None,
'humidity': 89,
'windspeed': 3.77,
'winddeg': 165,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 03:00:00'),
'temp': 302.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 86,
'windspeed': 4.21,
'winddeg': 169,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 04:00:00'),
'temp': 305.08,
'pressure': 1009,
'grnd_level': None,
'humidity': 78,
'windspeed': 5,
'winddeg': 174,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 05:00:00'),
'temp': 303.42,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 5.23,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 06:00:00'),
'temp': 305.55,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 4.44,
'winddeg': 192,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 07:00:00'),
'temp': 308.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 78,
'windspeed': 4.47,
'winddeg': 191,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 08:00:00'),
'temp': 303.87,
'pressure': 1006,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.8,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 09:00:00'),
'temp': 305.4,
'pressure': 1005,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.59,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 10:00:00'),
'temp': 304.71,
'pressure': 1005,
'grnd_level': None,
'humidity': 80,
'windspeed': 3.93,
'winddeg': 162,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 11:00:00'),
'temp': 303.88,
'pressure': 1005,
'grnd_level': None,
'humidity': 83,
'windspeed': 4.69,
'winddeg': 173,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 12:00:00'),
'temp': 302.73,
'pressure': 1006,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.88,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 13:00:00'),
'temp': 302.59,
'pressure': 1007,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.76,
'winddeg': 164,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 14:00:00'),
'temp': 302.28,
'pressure': 1008,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.79,
'winddeg': 180,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 15:00:00'),
'temp': 299.69,
'pressure': 1009,
'grnd_level': None,
'humidity': 95,
'windspeed': 3.33,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 16:00:00'),
'temp': 299.77,
'pressure': 1009,
'grnd_level': None,
'humidity': 95,
'windspeed': 3.17,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-07-10 17:00:00'),
'temp': 300.46,
'pressure': 1008,
'grnd_level': None,
'humidity': 85,
'windspeed': 2.63,
'winddeg': 202,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 17:00:00'),
'temp': 301.65,
'pressure': 1010,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.7,
'winddeg': 166,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 18:00:00'),
'temp': 301.65,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.35,
'winddeg': 183,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 19:00:00'),
'temp': 301.51,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.54,
'winddeg': 180,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 20:00:00'),
'temp': 300.22,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.74,
'winddeg': 161,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 21:00:00'),
'temp': 299.96,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 2,
'winddeg': 123,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 22:00:00'),
'temp': 300.28,
'pressure': 1008,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.22,
'winddeg': 101,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-02 23:00:00'),
'temp': 299.8,
'pressure': 1009,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.86,
'winddeg': 89,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 00:00:00'),
'temp': 299.86,
'pressure': 1009,
'grnd_level': None,
'humidity': 93,
'windspeed': 1.68,
'winddeg': 64,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 01:00:00'),
'temp': 300.25,
'pressure': 1010,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.09,
'winddeg': 86,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 02:00:00'),
'temp': 301.39,
'pressure': 1010,
'grnd_level': None,
'humidity': 92,
'windspeed': 3.12,
'winddeg': 85,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 03:00:00'),
'temp': 302.67,
'pressure': 1010,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.07,
'winddeg': 98,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 04:00:00'),
'temp': 303.71,
'pressure': 1010,
'grnd_level': None,
'humidity': 82,
'windspeed': 1.14,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 05:00:00'),
'temp': 303.81,
'pressure': 1010,
'grnd_level': None,
'humidity': 81,
'windspeed': 1.05,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 06:00:00'),
'temp': 304.79,
'pressure': 1008,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.31,
'winddeg': 252,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 07:00:00'),
'temp': 304.4,
'pressure': 1008,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.8,
'winddeg': 265,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 08:00:00'),
'temp': 302.08,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.62,
'winddeg': 275,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 09:00:00'),
'temp': 300.55,
'pressure': 1008,
'grnd_level': None,
'humidity': 95,
'windspeed': 2.63,
'winddeg': 304,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 10:00:00'),
'temp': 302.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.25,
'winddeg': 350,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 11:00:00'),
'temp': 301.3,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.07,
'winddeg': 32,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 12:00:00'),
'temp': 302.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 1.51,
'winddeg': 10,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 13:00:00'),
'temp': 301.78,
'pressure': 1010,
'grnd_level': None,
'humidity': 87,
'windspeed': 0.97,
'winddeg': 67,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 14:00:00'),
'temp': 300.9,
'pressure': 1010,
'grnd_level': None,
'humidity': 86,
'windspeed': 0.8,
'winddeg': 45,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 15:00:00'),
'temp': 297.68,
'pressure': 1011,
'grnd_level': None,
'humidity': 96,
'windspeed': 0.38,
'winddeg': 325,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 16:00:00'),
'temp': 297.31,
'pressure': 1011,
'grnd_level': None,
'humidity': 97,
'windspeed': 0.31,
'winddeg': 153,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 17:00:00'),
'temp': 297.68,
'pressure': 1010,
'grnd_level': None,
'humidity': 98,
'windspeed': 0.84,
'winddeg': 210,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 18:00:00'),
'temp': 297.72,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 0.52,
'winddeg': 317,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 19:00:00'),
'temp': 297.31,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 0.2,
'winddeg': 220,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 20:00:00'),
'temp': 297.56,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 0.43,
'winddeg': 216,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 21:00:00'),
'temp': 297.06,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 0.77,
'winddeg': 12,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 22:00:00'),
'temp': 297.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.51,
'winddeg': 39,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-03 23:00:00'),
'temp': 297.06,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.37,
'winddeg': 10,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 00:00:00'),
'temp': 297.08,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.11,
'winddeg': 80,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 01:00:00'),
'temp': 297.43,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.65,
'winddeg': 107,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 02:00:00'),
'temp': 299.63,
'pressure': 1011,
'grnd_level': None,
'humidity': 87,
'windspeed': 1.67,
'winddeg': 107,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 03:00:00'),
'temp': 300.7,
'pressure': 1011,
'grnd_level': None,
'humidity': 84,
'windspeed': 0.7,
'winddeg': 58,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 04:00:00'),
'temp': 303.05,
'pressure': 1011,
'grnd_level': None,
'humidity': 81,
'windspeed': 0.65,
'winddeg': 346,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 05:00:00'),
'temp': 303.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 68,
'windspeed': 0.49,
'winddeg': 338,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 06:00:00'),
'temp': 305.25,
'pressure': 1009,
'grnd_level': None,
'humidity': 74,
'windspeed': 1.06,
'winddeg': 196,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 07:00:00'),
'temp': 305.16,
'pressure': 1008,
'grnd_level': None,
'humidity': 75,
'windspeed': 0.97,
'winddeg': 198,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 08:00:00'),
'temp': 304.77,
'pressure': 1008,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.15,
'winddeg': 226,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 09:00:00'),
'temp': 303.84,
'pressure': 1008,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.16,
'winddeg': 256,
'cloudall': 93,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 10:00:00'),
'temp': 302.87,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.87,
'winddeg': 274,
'cloudall': 95,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 11:00:00'),
'temp': 302.13,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.51,
'winddeg': 269,
'cloudall': 96,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 12:00:00'),
'temp': 301.91,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.38,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 13:00:00'),
'temp': 301.4,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.27,
'winddeg': 212,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 14:00:00'),
'temp': 299.29,
'pressure': 1009,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.18,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 15:00:00'),
'temp': 297.66,
'pressure': 1010,
'grnd_level': None,
'humidity': 85,
'windspeed': 1.96,
'winddeg': 196,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 16:00:00'),
'temp': 298.52,
'pressure': 1010,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.79,
'winddeg': 201,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 17:00:00'),
'temp': 297.68,
'pressure': 1010,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.1,
'winddeg': 210,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 18:00:00'),
'temp': 297.71,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.61,
'winddeg': 237,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 19:00:00'),
'temp': 297.37,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.41,
'winddeg': 245,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 20:00:00'),
'temp': 297.7,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.3,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 21:00:00'),
'temp': 298.02,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.94,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 22:00:00'),
'temp': 298.02,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.64,
'winddeg': 249,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-04 23:00:00'),
'temp': 297.72,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.45,
'winddeg': 263,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 00:00:00'),
'temp': 297.73,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.86,
'winddeg': 171,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 01:00:00'),
'temp': 298.42,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.19,
'winddeg': 181,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 02:00:00'),
'temp': 300.66,
'pressure': 1010,
'grnd_level': None,
'humidity': 84,
'windspeed': 1.23,
'winddeg': 207,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 03:00:00'),
'temp': 302.41,
'pressure': 1010,
'grnd_level': None,
'humidity': 78,
'windspeed': 1.5,
'winddeg': 216,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 04:00:00'),
'temp': 303.83,
'pressure': 1010,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.16,
'winddeg': 240,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 05:00:00'),
'temp': 304.42,
'pressure': 1009,
'grnd_level': None,
'humidity': 74,
'windspeed': 1.02,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 06:00:00'),
'temp': 304.24,
'pressure': 1008,
'grnd_level': None,
'humidity': 74,
'windspeed': 2.25,
'winddeg': 191,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 07:00:00'),
'temp': 304.66,
'pressure': 1007,
'grnd_level': None,
'humidity': 74,
'windspeed': 2.58,
'winddeg': 187,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 08:00:00'),
'temp': 304.66,
'pressure': 1006,
'grnd_level': None,
'humidity': 76,
'windspeed': 1.54,
'winddeg': 221,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 09:00:00'),
'temp': 304.87,
'pressure': 1006,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.24,
'winddeg': 247,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 10:00:00'),
'temp': 305.18,
'pressure': 1006,
'grnd_level': None,
'humidity': 72,
'windspeed': 1.88,
'winddeg': 215,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 11:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.58,
'winddeg': 218,
'cloudall': 92,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 12:00:00'),
'temp': 302,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.8,
'winddeg': 183,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 13:00:00'),
'temp': 301.73,
'pressure': 1008,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.5,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 14:00:00'),
'temp': 301.94,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.18,
'winddeg': 174,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 15:00:00'),
'temp': 301.58,
'pressure': 1009,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.07,
'winddeg': 170,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 16:00:00'),
'temp': 301.24,
'pressure': 1009,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.07,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 17:00:00'),
'temp': 301.26,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.29,
'winddeg': 196,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 18:00:00'),
'temp': 300.17,
'pressure': 1007,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.74,
'winddeg': 230,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 19:00:00'),
'temp': 298.8,
'pressure': 1007,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.21,
'winddeg': 244,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 20:00:00'),
'temp': 299.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.11,
'winddeg': 256,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 21:00:00'),
'temp': 299.49,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.04,
'winddeg': 246,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 22:00:00'),
'temp': 299.46,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.68,
'winddeg': 253,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-05 23:00:00'),
'temp': 299.17,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.72,
'winddeg': 250,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 00:00:00'),
'temp': 299.47,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.66,
'winddeg': 271,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 01:00:00'),
'temp': 300.81,
'pressure': 1008,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.12,
'winddeg': 285,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 02:00:00'),
'temp': 302.29,
'pressure': 1009,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.51,
'winddeg': 291,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 03:00:00'),
'temp': 303.7,
'pressure': 1009,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.06,
'winddeg': 284,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 04:00:00'),
'temp': 304.84,
'pressure': 1009,
'grnd_level': None,
'humidity': 70,
'windspeed': 3.29,
'winddeg': 283,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 05:00:00'),
'temp': 305.47,
'pressure': 1008,
'grnd_level': None,
'humidity': 67,
'windspeed': 3.7,
'winddeg': 278,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 06:00:00'),
'temp': 305.95,
'pressure': 1007,
'grnd_level': None,
'humidity': 66,
'windspeed': 3.94,
'winddeg': 279,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 07:00:00'),
'temp': 306.55,
'pressure': 1006,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.97,
'winddeg': 265,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 08:00:00'),
'temp': 306.28,
'pressure': 1005,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.99,
'winddeg': 266,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 09:00:00'),
'temp': 306.16,
'pressure': 1005,
'grnd_level': None,
'humidity': 70,
'windspeed': 3.03,
'winddeg': 268,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 10:00:00'),
'temp': 306.32,
'pressure': 1005,
'grnd_level': None,
'humidity': 69,
'windspeed': 2.8,
'winddeg': 266,
'cloudall': 78,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 11:00:00'),
'temp': 306.18,
'pressure': 1005,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.36,
'winddeg': 240,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 12:00:00'),
'temp': 305.02,
'pressure': 1006,
'grnd_level': None,
'humidity': 76,
'windspeed': 3.62,
'winddeg': 208,
'cloudall': 65,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 13:00:00'),
'temp': 301.9,
'pressure': 1007,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.67,
'winddeg': 197,
'cloudall': 46,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 14:00:00'),
'temp': 303.33,
'pressure': 1008,
'grnd_level': None,
'humidity': 82,
'windspeed': 3.08,
'winddeg': 188,
'cloudall': 73,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 15:00:00'),
'temp': 297.82,
'pressure': 1008,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.8,
'winddeg': 186,
'cloudall': 82,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 16:00:00'),
'temp': 298.16,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.4,
'winddeg': 194,
'cloudall': 86,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 17:00:00'),
'temp': 298.49,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.09,
'winddeg': 212,
'cloudall': 89,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 18:00:00'),
'temp': 298.48,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.04,
'winddeg': 235,
'cloudall': 88,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 19:00:00'),
'temp': 298.45,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.14,
'winddeg': 255,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 20:00:00'),
'temp': 298.84,
'pressure': 1006,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.12,
'winddeg': 272,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 21:00:00'),
'temp': 298.45,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.05,
'winddeg': 271,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 22:00:00'),
'temp': 298.8,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.77,
'winddeg': 270,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-06 23:00:00'),
'temp': 298.8,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.64,
'winddeg': 282,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 00:00:00'),
'temp': 298.8,
'pressure': 1009,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.59,
'winddeg': 287,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 01:00:00'),
'temp': 299.58,
'pressure': 1009,
'grnd_level': None,
'humidity': 98,
'windspeed': 1.91,
'winddeg': 277,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 02:00:00'),
'temp': 301.74,
'pressure': 1010,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.2,
'winddeg': 272,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 03:00:00'),
'temp': 303.47,
'pressure': 1010,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.15,
'winddeg': 267,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 04:00:00'),
'temp': 303.77,
'pressure': 1009,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.46,
'winddeg': 271,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 05:00:00'),
'temp': 305.21,
'pressure': 1008,
'grnd_level': None,
'humidity': 73,
'windspeed': 2.62,
'winddeg': 269,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 06:00:00'),
'temp': 305.54,
'pressure': 1007,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.73,
'winddeg': 251,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 07:00:00'),
'temp': 304.83,
'pressure': 1006,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.96,
'winddeg': 247,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 08:00:00'),
'temp': 305.03,
'pressure': 1005,
'grnd_level': None,
'humidity': 99,
'windspeed': 3.29,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 09:00:00'),
'temp': 305.7,
'pressure': 1005,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.91,
'winddeg': 210,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 10:00:00'),
'temp': 305.65,
'pressure': 1005,
'grnd_level': None,
'humidity': 85,
'windspeed': 2.77,
'winddeg': 176,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 11:00:00'),
'temp': 304.67,
'pressure': 1005,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.95,
'winddeg': 168,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 12:00:00'),
'temp': 303.1,
'pressure': 1007,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.86,
'winddeg': 182,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 13:00:00'),
'temp': 303.1,
'pressure': 1008,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.97,
'winddeg': 185,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 14:00:00'),
'temp': 301.11,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.38,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 15:00:00'),
'temp': 300.26,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.09,
'winddeg': 183,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 16:00:00'),
'temp': 299.95,
'pressure': 1010,
'grnd_level': None,
'humidity': 92,
'windspeed': 3.4,
'winddeg': 183,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 17:00:00'),
'temp': 299.58,
'pressure': 1009,
'grnd_level': None,
'humidity': 94,
'windspeed': 3.32,
'winddeg': 182,
'cloudall': 91,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 18:00:00'),
'temp': 299.58,
'pressure': 1009,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.21,
'winddeg': 195,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 19:00:00'),
'temp': 299.58,
'pressure': 1008,
'grnd_level': None,
'humidity': 95,
'windspeed': 1.78,
'winddeg': 192,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 20:00:00'),
'temp': 299.58,
'pressure': 1008,
'grnd_level': None,
'humidity': 96,
'windspeed': 1.32,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 21:00:00'),
'temp': 299.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 97,
'windspeed': 0.87,
'winddeg': 187,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 22:00:00'),
'temp': 299.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 98,
'windspeed': 0.9,
'winddeg': 195,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-07 23:00:00'),
'temp': 299.17,
'pressure': 1008,
'grnd_level': None,
'humidity': 98,
'windspeed': 0.81,
'winddeg': 217,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 00:00:00'),
'temp': 299.17,
'pressure': 1009,
'grnd_level': None,
'humidity': 97,
'windspeed': 0.88,
'winddeg': 255,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 01:00:00'),
'temp': 300.24,
'pressure': 1010,
'grnd_level': None,
'humidity': 94,
'windspeed': 1.25,
'winddeg': 273,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 02:00:00'),
'temp': 300.96,
'pressure': 1010,
'grnd_level': None,
'humidity': 89,
'windspeed': 1.43,
'winddeg': 286,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 03:00:00'),
'temp': 303.48,
'pressure': 1011,
'grnd_level': None,
'humidity': 79,
'windspeed': 1.11,
'winddeg': 282,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 04:00:00'),
'temp': 304.55,
'pressure': 1010,
'grnd_level': None,
'humidity': 73,
'windspeed': 1.77,
'winddeg': 283,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 05:00:00'),
'temp': 305.63,
'pressure': 1009,
'grnd_level': None,
'humidity': 67,
'windspeed': 2.1,
'winddeg': 274,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 06:00:00'),
'temp': 306.33,
'pressure': 1008,
'grnd_level': None,
'humidity': 67,
'windspeed': 2.19,
'winddeg': 272,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 07:00:00'),
'temp': 305.17,
'pressure': 1007,
'grnd_level': None,
'humidity': 74,
'windspeed': 2.39,
'winddeg': 254,
'cloudall': 57,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 08:00:00'),
'temp': 308.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 73,
'windspeed': 2.31,
'winddeg': 241,
'cloudall': 74,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 09:00:00'),
'temp': 307.21,
'pressure': 1005,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.12,
'winddeg': 231,
'cloudall': 65,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 10:00:00'),
'temp': 306.86,
'pressure': 1005,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.49,
'winddeg': 208,
'cloudall': 70,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 11:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.15,
'winddeg': 186,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 12:00:00'),
'temp': 303.77,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.02,
'winddeg': 163,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 13:00:00'),
'temp': 303.1,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 4.04,
'winddeg': 171,
'cloudall': 14,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 14:00:00'),
'temp': 302.72,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 3.65,
'winddeg': 182,
'cloudall': 17,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 15:00:00'),
'temp': 302.72,
'pressure': 1009,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.52,
'winddeg': 187,
'cloudall': 36,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 16:00:00'),
'temp': 302.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.69,
'winddeg': 190,
'cloudall': 45,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 17:00:00'),
'temp': 302.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 4.03,
'winddeg': 184,
'cloudall': 42,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 18:00:00'),
'temp': 302.02,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.22,
'winddeg': 185,
'cloudall': 54,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 19:00:00'),
'temp': 302.03,
'pressure': 1008,
'grnd_level': None,
'humidity': 89,
'windspeed': 2.71,
'winddeg': 189,
'cloudall': 10,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 20:00:00'),
'temp': 301.65,
'pressure': 1007,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.12,
'winddeg': 194,
'cloudall': 10,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 21:00:00'),
'temp': 301.32,
'pressure': 1007,
'grnd_level': None,
'humidity': 93,
'windspeed': 2.02,
'winddeg': 172,
'cloudall': 10,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 22:00:00'),
'temp': 301.32,
'pressure': 1007,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.01,
'winddeg': 181,
'cloudall': 10,
'weathermain': 'Clear'},
{'station': '3T',
'timestamp': Timestamp('2024-08-08 23:00:00'),
'temp': 300.98,
'pressure': 1008,
'grnd_level': None,
'humidity': 96,
'windspeed': 1.54,
'winddeg': 184,
'cloudall': 11,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 00:00:00'),
'temp': 301.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.21,
'winddeg': 191,
'cloudall': 90,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 01:00:00'),
'temp': 302.77,
'pressure': 1009,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.04,
'winddeg': 194,
'cloudall': 91,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 02:00:00'),
'temp': 304.73,
'pressure': 1010,
'grnd_level': None,
'humidity': 72,
'windspeed': 2.79,
'winddeg': 207,
'cloudall': 60,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 03:00:00'),
'temp': 305.25,
'pressure': 1010,
'grnd_level': None,
'humidity': 70,
'windspeed': 2.63,
'winddeg': 222,
'cloudall': 54,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 04:00:00'),
'temp': 305.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.24,
'winddeg': 213,
'cloudall': 47,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 05:00:00'),
'temp': 307.1,
'pressure': 1009,
'grnd_level': None,
'humidity': 59,
'windspeed': 2.27,
'winddeg': 218,
'cloudall': 45,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 06:00:00'),
'temp': 307.4,
'pressure': 1007,
'grnd_level': None,
'humidity': 60,
'windspeed': 1.91,
'winddeg': 242,
'cloudall': 34,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 07:00:00'),
'temp': 308.48,
'pressure': 1006,
'grnd_level': None,
'humidity': 56,
'windspeed': 2.09,
'winddeg': 229,
'cloudall': 42,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 08:00:00'),
'temp': 307.73,
'pressure': 1005,
'grnd_level': None,
'humidity': 60,
'windspeed': 2.65,
'winddeg': 201,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 09:00:00'),
'temp': 307.34,
'pressure': 1005,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.67,
'winddeg': 177,
'cloudall': 79,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 10:00:00'),
'temp': 306.41,
'pressure': 1005,
'grnd_level': None,
'humidity': 70,
'windspeed': 4.12,
'winddeg': 161,
'cloudall': 84,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 11:00:00'),
'temp': 304.77,
'pressure': 1005,
'grnd_level': None,
'humidity': 75,
'windspeed': 4.54,
'winddeg': 163,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 12:00:00'),
'temp': 304.76,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 4.4,
'winddeg': 170,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 13:00:00'),
'temp': 304.06,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 4.27,
'winddeg': 173,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 14:00:00'),
'temp': 303.39,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 4.21,
'winddeg': 183,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 15:00:00'),
'temp': 303.39,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 4.83,
'winddeg': 182,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 16:00:00'),
'temp': 302.72,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 4.41,
'winddeg': 179,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-08-09 17:00:00'),
'temp': 302.68,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 4.12,
'winddeg': 179,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 17:00:00'),
'temp': 298.13,
'pressure': 1006,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.63,
'winddeg': 282,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 18:00:00'),
'temp': 297.75,
'pressure': 1006,
'grnd_level': None,
'humidity': 98,
'windspeed': 2.09,
'winddeg': 297,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 19:00:00'),
'temp': 297.72,
'pressure': 1005,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.9,
'winddeg': 335,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 20:00:00'),
'temp': 298.1,
'pressure': 1005,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.35,
'winddeg': 343,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 21:00:00'),
'temp': 298.39,
'pressure': 1006,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.86,
'winddeg': 308,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 22:00:00'),
'temp': 298.77,
'pressure': 1006,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.22,
'winddeg': 301,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-01 23:00:00'),
'temp': 298.77,
'pressure': 1007,
'grnd_level': None,
'humidity': 99,
'windspeed': 2.18,
'winddeg': 310,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 00:00:00'),
'temp': 298.8,
'pressure': 1008,
'grnd_level': None,
'humidity': 99,
'windspeed': 1.86,
'winddeg': 331,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 01:00:00'),
'temp': 299.46,
'pressure': 1008,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.64,
'winddeg': 318,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 02:00:00'),
'temp': 299.87,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.23,
'winddeg': 315,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 03:00:00'),
'temp': 301.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.65,
'winddeg': 273,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 04:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 84,
'windspeed': 1.64,
'winddeg': 288,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 05:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.54,
'winddeg': 314,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 06:00:00'),
'temp': 303.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 70,
'windspeed': 2.59,
'winddeg': 310,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 07:00:00'),
'temp': 304.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.43,
'winddeg': 307,
'cloudall': 80,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 08:00:00'),
'temp': 303.99,
'pressure': 1003,
'grnd_level': None,
'humidity': 60,
'windspeed': 2.07,
'winddeg': 291,
'cloudall': 90,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 09:00:00'),
'temp': 302.63,
'pressure': 1003,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.31,
'winddeg': 255,
'cloudall': 93,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 10:00:00'),
'temp': 303.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 74,
'windspeed': 2.22,
'winddeg': 224,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 11:00:00'),
'temp': 302.99,
'pressure': 1004,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.53,
'winddeg': 190,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 12:00:00'),
'temp': 302.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.5,
'winddeg': 196,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 13:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.89,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 14:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.26,
'winddeg': 192,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 15:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.76,
'winddeg': 200,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 16:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.86,
'winddeg': 214,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 17:00:00'),
'temp': 301.37,
'pressure': 1008,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.68,
'winddeg': 255,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 18:00:00'),
'temp': 301.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.04,
'winddeg': 248,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 19:00:00'),
'temp': 300.88,
'pressure': 1006,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.2,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 20:00:00'),
'temp': 299.99,
'pressure': 1005,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.4,
'winddeg': 252,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 21:00:00'),
'temp': 299.99,
'pressure': 1005,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.37,
'winddeg': 274,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 22:00:00'),
'temp': 299.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.31,
'winddeg': 284,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-02 23:00:00'),
'temp': 300.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.34,
'winddeg': 259,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 00:00:00'),
'temp': 300.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.58,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 01:00:00'),
'temp': 300.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.22,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 02:00:00'),
'temp': 301.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.41,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 03:00:00'),
'temp': 302.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.08,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 04:00:00'),
'temp': 302.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.07,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 05:00:00'),
'temp': 301.88,
'pressure': 1008,
'grnd_level': None,
'humidity': 93,
'windspeed': 2.98,
'winddeg': 219,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 06:00:00'),
'temp': 301.88,
'pressure': 1007,
'grnd_level': None,
'humidity': 95,
'windspeed': 2.49,
'winddeg': 195,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 07:00:00'),
'temp': 301.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 93,
'windspeed': 4.16,
'winddeg': 229,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 08:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.5,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 09:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 86,
'windspeed': 3.48,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 10:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 85,
'windspeed': 2.99,
'winddeg': 218,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 11:00:00'),
'temp': 303.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.3,
'winddeg': 212,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 12:00:00'),
'temp': 300.9,
'pressure': 1006,
'grnd_level': None,
'humidity': 54,
'windspeed': 1.69,
'winddeg': 189,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 13:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.41,
'winddeg': 220,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 14:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 85,
'windspeed': 1.66,
'winddeg': 257,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 15:00:00'),
'temp': 302.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 86,
'windspeed': 2.28,
'winddeg': 262,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 16:00:00'),
'temp': 299.99,
'pressure': 1008,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.28,
'winddeg': 252,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 17:00:00'),
'temp': 299.99,
'pressure': 1008,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.65,
'winddeg': 251,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 18:00:00'),
'temp': 299.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.86,
'winddeg': 245,
'cloudall': 96,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 19:00:00'),
'temp': 300.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.68,
'winddeg': 245,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 20:00:00'),
'temp': 300.88,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.67,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 21:00:00'),
'temp': 299.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.84,
'winddeg': 237,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 22:00:00'),
'temp': 299.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 3.16,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-03 23:00:00'),
'temp': 299.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.58,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 00:00:00'),
'temp': 299.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.39,
'winddeg': 220,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 01:00:00'),
'temp': 299.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.92,
'winddeg': 206,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 02:00:00'),
'temp': 301.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.74,
'winddeg': 204,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 03:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 78,
'windspeed': 4.48,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 04:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.68,
'winddeg': 208,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 05:00:00'),
'temp': 303.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 77,
'windspeed': 5.22,
'winddeg': 214,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 06:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.65,
'winddeg': 220,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 07:00:00'),
'temp': 305.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.75,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 08:00:00'),
'temp': 305.09,
'pressure': 1003,
'grnd_level': None,
'humidity': 70,
'windspeed': 5.4,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 09:00:00'),
'temp': 305.09,
'pressure': 1003,
'grnd_level': None,
'humidity': 76,
'windspeed': 4,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 10:00:00'),
'temp': 306.09,
'pressure': 1003,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.14,
'winddeg': 230,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 11:00:00'),
'temp': 305.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 77,
'windspeed': 3.53,
'winddeg': 242,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 12:00:00'),
'temp': 304.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 76,
'windspeed': 3.56,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 13:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 79,
'windspeed': 3.57,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 14:00:00'),
'temp': 304.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.96,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 15:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.91,
'winddeg': 251,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 16:00:00'),
'temp': 300.86,
'pressure': 1007,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.87,
'winddeg': 238,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 17:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.02,
'winddeg': 238,
'cloudall': 66,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 18:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.4,
'winddeg': 250,
'cloudall': 83,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 19:00:00'),
'temp': 302.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 78,
'windspeed': 3.09,
'winddeg': 247,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 20:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.96,
'winddeg': 245,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 21:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.66,
'winddeg': 238,
'cloudall': 94,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 22:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.3,
'winddeg': 234,
'cloudall': 83,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-04 23:00:00'),
'temp': 300.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.11,
'winddeg': 240,
'cloudall': 75,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 00:00:00'),
'temp': 300.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.4,
'winddeg': 242,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 01:00:00'),
'temp': 301.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 72,
'windspeed': 2.98,
'winddeg': 242,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 02:00:00'),
'temp': 303.11,
'pressure': 1007,
'grnd_level': None,
'humidity': 66,
'windspeed': 3.86,
'winddeg': 249,
'cloudall': 85,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 03:00:00'),
'temp': 304.11,
'pressure': 1007,
'grnd_level': None,
'humidity': 62,
'windspeed': 4.74,
'winddeg': 258,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 04:00:00'),
'temp': 306.61,
'pressure': 1007,
'grnd_level': None,
'humidity': 50,
'windspeed': 5.32,
'winddeg': 261,
'cloudall': 77,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 05:00:00'),
'temp': 307.25,
'pressure': 1006,
'grnd_level': None,
'humidity': 49,
'windspeed': 5.96,
'winddeg': 269,
'cloudall': 70,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 06:00:00'),
'temp': 307.91,
'pressure': 1004,
'grnd_level': None,
'humidity': 48,
'windspeed': 5.68,
'winddeg': 278,
'cloudall': 86,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 07:00:00'),
'temp': 308.15,
'pressure': 1003,
'grnd_level': None,
'humidity': 47,
'windspeed': 5.1,
'winddeg': 284,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 08:00:00'),
'temp': 306.99,
'pressure': 1002,
'grnd_level': None,
'humidity': 58,
'windspeed': 3.75,
'winddeg': 277,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 09:00:00'),
'temp': 306.09,
'pressure': 1002,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.68,
'winddeg': 285,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 10:00:00'),
'temp': 303.99,
'pressure': 1002,
'grnd_level': None,
'humidity': 65,
'windspeed': 2.81,
'winddeg': 254,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 11:00:00'),
'temp': 304.88,
'pressure': 1003,
'grnd_level': None,
'humidity': 67,
'windspeed': 4.17,
'winddeg': 250,
'cloudall': 92,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 12:00:00'),
'temp': 304.88,
'pressure': 1003,
'grnd_level': None,
'humidity': 64,
'windspeed': 6,
'winddeg': 251,
'cloudall': 80,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 13:00:00'),
'temp': 303.99,
'pressure': 1004,
'grnd_level': None,
'humidity': 66,
'windspeed': 5.09,
'winddeg': 257,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 14:00:00'),
'temp': 303.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.49,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 15:00:00'),
'temp': 303.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.04,
'winddeg': 262,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 16:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 3.32,
'winddeg': 267,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 17:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.26,
'winddeg': 260,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 18:00:00'),
'temp': 302.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.89,
'winddeg': 268,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 19:00:00'),
'temp': 302.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.45,
'winddeg': 259,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 20:00:00'),
'temp': 301.99,
'pressure': 1004,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.45,
'winddeg': 260,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 21:00:00'),
'temp': 301.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.28,
'winddeg': 265,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 22:00:00'),
'temp': 301.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.46,
'winddeg': 267,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-05 23:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.41,
'winddeg': 263,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 00:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.76,
'winddeg': 254,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 01:00:00'),
'temp': 301.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.84,
'winddeg': 265,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 02:00:00'),
'temp': 303.88,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 3.99,
'winddeg': 264,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 03:00:00'),
'temp': 304.12,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 4.49,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 04:00:00'),
'temp': 306.99,
'pressure': 1007,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.12,
'winddeg': 259,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 05:00:00'),
'temp': 306.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 3.97,
'winddeg': 253,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 06:00:00'),
'temp': 306.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 65,
'windspeed': 3.36,
'winddeg': 277,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 07:00:00'),
'temp': 306.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 69,
'windspeed': 3.98,
'winddeg': 301,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 08:00:00'),
'temp': 306.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 76,
'windspeed': 4.7,
'winddeg': 303,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 09:00:00'),
'temp': 306.09,
'pressure': 1003,
'grnd_level': None,
'humidity': 81,
'windspeed': 4.08,
'winddeg': 282,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 10:00:00'),
'temp': 306.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.12,
'winddeg': 268,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 11:00:00'),
'temp': 305.09,
'pressure': 1004,
'grnd_level': None,
'humidity': 80,
'windspeed': 3.42,
'winddeg': 257,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 12:00:00'),
'temp': 305.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 84,
'windspeed': 4.03,
'winddeg': 252,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 13:00:00'),
'temp': 304.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 83,
'windspeed': 3.29,
'winddeg': 255,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 14:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 4.24,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 15:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.43,
'winddeg': 256,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 16:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.65,
'winddeg': 247,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 17:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.08,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 18:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.53,
'winddeg': 244,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 19:00:00'),
'temp': 302.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.36,
'winddeg': 243,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 20:00:00'),
'temp': 302.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.41,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 21:00:00'),
'temp': 301.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.15,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 22:00:00'),
'temp': 301.2,
'pressure': 1005,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.42,
'winddeg': 231,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-06 23:00:00'),
'temp': 300.2,
'pressure': 1005,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.38,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 00:00:00'),
'temp': 301.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.13,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 01:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.49,
'winddeg': 234,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 02:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.33,
'winddeg': 233,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 03:00:00'),
'temp': 305.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.32,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 04:00:00'),
'temp': 305.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.85,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 05:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.98,
'winddeg': 261,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 06:00:00'),
'temp': 306.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.6,
'winddeg': 269,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 07:00:00'),
'temp': 306.88,
'pressure': 1005,
'grnd_level': None,
'humidity': 55,
'windspeed': 7.06,
'winddeg': 258,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 08:00:00'),
'temp': 306.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 58,
'windspeed': 6.7,
'winddeg': 261,
'cloudall': 72,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 09:00:00'),
'temp': 305.99,
'pressure': 1005,
'grnd_level': None,
'humidity': 61,
'windspeed': 5.67,
'winddeg': 260,
'cloudall': 81,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 10:00:00'),
'temp': 306.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 65,
'windspeed': 5.11,
'winddeg': 258,
'cloudall': 86,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 11:00:00'),
'temp': 306.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 5,
'winddeg': 250,
'cloudall': 89,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 12:00:00'),
'temp': 303.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 68,
'windspeed': 4.73,
'winddeg': 250,
'cloudall': 80,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 13:00:00'),
'temp': 303.88,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 4.17,
'winddeg': 240,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 14:00:00'),
'temp': 303.88,
'pressure': 1008,
'grnd_level': None,
'humidity': 72,
'windspeed': 4,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 15:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 4.08,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 16:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 4.11,
'winddeg': 232,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 17:00:00'),
'temp': 302.99,
'pressure': 1009,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.89,
'winddeg': 237,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 18:00:00'),
'temp': 302.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 74,
'windspeed': 3.49,
'winddeg': 236,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 19:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.89,
'winddeg': 238,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 20:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.28,
'winddeg': 239,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 21:00:00'),
'temp': 302.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.95,
'winddeg': 212,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 22:00:00'),
'temp': 301.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.05,
'winddeg': 206,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-07 23:00:00'),
'temp': 301.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.63,
'winddeg': 215,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 00:00:00'),
'temp': 301.21,
'pressure': 1008,
'grnd_level': None,
'humidity': 76,
'windspeed': 2.86,
'winddeg': 213,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 01:00:00'),
'temp': 302.98,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.78,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 02:00:00'),
'temp': 303.97,
'pressure': 1009,
'grnd_level': None,
'humidity': 71,
'windspeed': 3.77,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 03:00:00'),
'temp': 304.97,
'pressure': 1010,
'grnd_level': None,
'humidity': 69,
'windspeed': 4.07,
'winddeg': 227,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 04:00:00'),
'temp': 305.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 65,
'windspeed': 4.66,
'winddeg': 229,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 05:00:00'),
'temp': 306.03,
'pressure': 1009,
'grnd_level': None,
'humidity': 60,
'windspeed': 5.26,
'winddeg': 240,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 06:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 65,
'windspeed': 4.85,
'winddeg': 251,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 07:00:00'),
'temp': 307.09,
'pressure': 1006,
'grnd_level': None,
'humidity': 57,
'windspeed': 5.5,
'winddeg': 258,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 08:00:00'),
'temp': 306.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.36,
'winddeg': 260,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 09:00:00'),
'temp': 305.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 58,
'windspeed': 4.32,
'winddeg': 278,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 10:00:00'),
'temp': 303.2,
'pressure': 1005,
'grnd_level': None,
'humidity': 60,
'windspeed': 4.74,
'winddeg': 275,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 11:00:00'),
'temp': 304.99,
'pressure': 1006,
'grnd_level': None,
'humidity': 65,
'windspeed': 4.38,
'winddeg': 274,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 12:00:00'),
'temp': 303.88,
'pressure': 1007,
'grnd_level': None,
'humidity': 67,
'windspeed': 4.07,
'winddeg': 258,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 13:00:00'),
'temp': 303.88,
'pressure': 1008,
'grnd_level': None,
'humidity': 69,
'windspeed': 3.48,
'winddeg': 249,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 14:00:00'),
'temp': 303.88,
'pressure': 1009,
'grnd_level': None,
'humidity': 71,
'windspeed': 3.45,
'winddeg': 235,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 15:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.71,
'winddeg': 229,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 16:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.67,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-09-08 17:00:00'),
'temp': 302.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 73,
'windspeed': 3.61,
'winddeg': 222,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 17:00:00'),
'temp': 298.51,
'pressure': 1008,
'grnd_level': None,
'humidity': 83,
'windspeed': 0.87,
'winddeg': 197,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 18:00:00'),
'temp': 299.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 85,
'windspeed': 0.98,
'winddeg': 305,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 19:00:00'),
'temp': 298.2,
'pressure': 1007,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.86,
'winddeg': 356,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 20:00:00'),
'temp': 299.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 89,
'windspeed': 1.94,
'winddeg': 8,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 21:00:00'),
'temp': 300.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.93,
'winddeg': 9,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 22:00:00'),
'temp': 299.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.55,
'winddeg': 360,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-01 23:00:00'),
'temp': 299.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.16,
'winddeg': 358,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 00:00:00'),
'temp': 299.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.71,
'winddeg': 19,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 01:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 85,
'windspeed': 2.07,
'winddeg': 28,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 02:00:00'),
'temp': 301.3,
'pressure': 1011,
'grnd_level': None,
'humidity': 81,
'windspeed': 1.92,
'winddeg': 40,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 03:00:00'),
'temp': 302.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 76,
'windspeed': 1.71,
'winddeg': 54,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 04:00:00'),
'temp': 303.23,
'pressure': 1010,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.3,
'winddeg': 91,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 05:00:00'),
'temp': 304.11,
'pressure': 1009,
'grnd_level': None,
'humidity': 66,
'windspeed': 2.4,
'winddeg': 128,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 06:00:00'),
'temp': 305.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 65,
'windspeed': 5.31,
'winddeg': 163,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 07:00:00'),
'temp': 307.44,
'pressure': 1006,
'grnd_level': None,
'humidity': 55,
'windspeed': 4.68,
'winddeg': 179,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 08:00:00'),
'temp': 306.13,
'pressure': 1005,
'grnd_level': None,
'humidity': 61,
'windspeed': 4.36,
'winddeg': 181,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 09:00:00'),
'temp': 305.09,
'pressure': 1005,
'grnd_level': None,
'humidity': 62,
'windspeed': 4.08,
'winddeg': 177,
'cloudall': 98,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 10:00:00'),
'temp': 305.88,
'pressure': 1006,
'grnd_level': None,
'humidity': 65,
'windspeed': 4.04,
'winddeg': 176,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 11:00:00'),
'temp': 303.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 70,
'windspeed': 3.6,
'winddeg': 179,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 12:00:00'),
'temp': 302.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 74,
'windspeed': 3.68,
'winddeg': 171,
'cloudall': 99,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 13:00:00'),
'temp': 301.3,
'pressure': 1009,
'grnd_level': None,
'humidity': 76,
'windspeed': 3.59,
'winddeg': 175,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 14:00:00'),
'temp': 301.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 81,
'windspeed': 3.66,
'winddeg': 184,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 15:00:00'),
'temp': 300.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 85,
'windspeed': 3.37,
'winddeg': 196,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 16:00:00'),
'temp': 300.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 87,
'windspeed': 2.46,
'winddeg': 206,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 17:00:00'),
'temp': 300.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.04,
'winddeg': 228,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 18:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 90,
'windspeed': 3.47,
'winddeg': 250,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 19:00:00'),
'temp': 300.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.35,
'winddeg': 263,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 20:00:00'),
'temp': 299.2,
'pressure': 1008,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.33,
'winddeg': 282,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 21:00:00'),
'temp': 299.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 2.71,
'winddeg': 286,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 22:00:00'),
'temp': 299.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.2,
'winddeg': 309,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-02 23:00:00'),
'temp': 299.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.18,
'winddeg': 313,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 00:00:00'),
'temp': 299.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 92,
'windspeed': 1.91,
'winddeg': 334,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 01:00:00'),
'temp': 299.2,
'pressure': 1012,
'grnd_level': None,
'humidity': 92,
'windspeed': 2.73,
'winddeg': 25,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 02:00:00'),
'temp': 300.2,
'pressure': 1012,
'grnd_level': None,
'humidity': 89,
'windspeed': 2.42,
'winddeg': 21,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 03:00:00'),
'temp': 301.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 84,
'windspeed': 2.48,
'winddeg': 3,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 04:00:00'),
'temp': 302.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.52,
'winddeg': 355,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 05:00:00'),
'temp': 303.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 80,
'windspeed': 2.6,
'winddeg': 360,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 06:00:00'),
'temp': 304.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 82,
'windspeed': 2.66,
'winddeg': 15,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 07:00:00'),
'temp': 306.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 78,
'windspeed': 2.26,
'winddeg': 17,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 08:00:00'),
'temp': 305.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 72,
'windspeed': 2.09,
'winddeg': 9,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 09:00:00'),
'temp': 305.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.27,
'winddeg': 350,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 10:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 75,
'windspeed': 2.31,
'winddeg': 352,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 11:00:00'),
'temp': 303.98,
'pressure': 1008,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.24,
'winddeg': 22,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 12:00:00'),
'temp': 298.17,
'pressure': 1008,
'grnd_level': None,
'humidity': 63,
'windspeed': 2.13,
'winddeg': 64,
'cloudall': 99,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 13:00:00'),
'temp': 298.88,
'pressure': 1010,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.44,
'winddeg': 72,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 14:00:00'),
'temp': 298.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.79,
'winddeg': 81,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 15:00:00'),
'temp': 299.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 87,
'windspeed': 3.53,
'winddeg': 84,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 16:00:00'),
'temp': 299.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 88,
'windspeed': 3.23,
'winddeg': 91,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 17:00:00'),
'temp': 299.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 89,
'windspeed': 3.11,
'winddeg': 90,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 18:00:00'),
'temp': 299.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.65,
'winddeg': 165,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 19:00:00'),
'temp': 299.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 89,
'windspeed': 2.65,
'winddeg': 196,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 20:00:00'),
'temp': 299.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 2.15,
'winddeg': 208,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 21:00:00'),
'temp': 299.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.33,
'winddeg': 209,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 22:00:00'),
'temp': 299.32,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 1.32,
'winddeg': 195,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-03 23:00:00'),
'temp': 298.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 91,
'windspeed': 0.26,
'winddeg': 132,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 00:00:00'),
'temp': 297.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 90,
'windspeed': 1.32,
'winddeg': 43,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 01:00:00'),
'temp': 298.4,
'pressure': 1012,
'grnd_level': None,
'humidity': 88,
'windspeed': 2.13,
'winddeg': 44,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 02:00:00'),
'temp': 298.82,
'pressure': 1013,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.9,
'winddeg': 41,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 03:00:00'),
'temp': 302.28,
'pressure': 1013,
'grnd_level': None,
'humidity': 62,
'windspeed': 1.25,
'winddeg': 17,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 04:00:00'),
'temp': 303.55,
'pressure': 1012,
'grnd_level': None,
'humidity': 61,
'windspeed': 0.99,
'winddeg': 2,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 05:00:00'),
'temp': 299.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.03,
'winddeg': 347,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 06:00:00'),
'temp': 304.51,
'pressure': 1010,
'grnd_level': None,
'humidity': 58,
'windspeed': 1.4,
'winddeg': 321,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 07:00:00'),
'temp': 302.2,
'pressure': 1009,
'grnd_level': None,
'humidity': 62,
'windspeed': 1.75,
'winddeg': 315,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 08:00:00'),
'temp': 306.15,
'pressure': 1008,
'grnd_level': None,
'humidity': 58,
'windspeed': 1.97,
'winddeg': 318,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 09:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 72,
'windspeed': 3.02,
'winddeg': 6,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 10:00:00'),
'temp': 304.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 91,
'windspeed': 3.51,
'winddeg': 29,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 11:00:00'),
'temp': 303.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 91,
'windspeed': 1.42,
'winddeg': 327,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 12:00:00'),
'temp': 302.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 93,
'windspeed': 3.29,
'winddeg': 265,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 13:00:00'),
'temp': 301.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 94,
'windspeed': 3.43,
'winddeg': 251,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 14:00:00'),
'temp': 299.2,
'pressure': 1012,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.63,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 15:00:00'),
'temp': 299.2,
'pressure': 1012,
'grnd_level': None,
'humidity': 96,
'windspeed': 3.42,
'winddeg': 212,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 16:00:00'),
'temp': 299.99,
'pressure': 1012,
'grnd_level': None,
'humidity': 95,
'windspeed': 3.17,
'winddeg': 219,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 17:00:00'),
'temp': 299.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 93,
'windspeed': 2.05,
'winddeg': 226,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 18:00:00'),
'temp': 299.99,
'pressure': 1011,
'grnd_level': None,
'humidity': 94,
'windspeed': 2.4,
'winddeg': 223,
'cloudall': 100,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 19:00:00'),
'temp': 299.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 95,
'windspeed': 1.88,
'winddeg': 219,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 20:00:00'),
'temp': 299.99,
'pressure': 1010,
'grnd_level': None,
'humidity': 94,
'windspeed': 0.52,
'winddeg': 259,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 21:00:00'),
'temp': 299.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 93,
'windspeed': 1.06,
'winddeg': 345,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 22:00:00'),
'temp': 299.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 94,
'windspeed': 1.92,
'winddeg': 321,
'cloudall': 76,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-04 23:00:00'),
'temp': 299.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 94,
'windspeed': 1.67,
'winddeg': 321,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 00:00:00'),
'temp': 299.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 93,
'windspeed': 1.41,
'winddeg': 325,
'cloudall': 58,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 01:00:00'),
'temp': 300.99,
'pressure': 1012,
'grnd_level': None,
'humidity': 88,
'windspeed': 1.14,
'winddeg': 333,
'cloudall': 37,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 02:00:00'),
'temp': 302.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 82,
'windspeed': 1.41,
'winddeg': 355,
'cloudall': 58,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 03:00:00'),
'temp': 303.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 77,
'windspeed': 2.26,
'winddeg': 352,
'cloudall': 69,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 04:00:00'),
'temp': 304.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 69,
'windspeed': 2.99,
'winddeg': 339,
'cloudall': 71,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 05:00:00'),
'temp': 305.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 64,
'windspeed': 3.29,
'winddeg': 337,
'cloudall': 75,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 06:00:00'),
'temp': 305.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 61,
'windspeed': 3.24,
'winddeg': 347,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 07:00:00'),
'temp': 305.99,
'pressure': 1008,
'grnd_level': None,
'humidity': 58,
'windspeed': 2.79,
'winddeg': 355,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 08:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 58,
'windspeed': 2.48,
'winddeg': 13,
'cloudall': 86,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 09:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 64,
'windspeed': 2.51,
'winddeg': 22,
'cloudall': 91,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 10:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 72,
'windspeed': 2.83,
'winddeg': 22,
'cloudall': 93,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 11:00:00'),
'temp': 305.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 73,
'windspeed': 2.56,
'winddeg': 14,
'cloudall': 87,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 12:00:00'),
'temp': 304.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 73,
'windspeed': 2.04,
'winddeg': 7,
'cloudall': 96,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 13:00:00'),
'temp': 304.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.52,
'winddeg': 16,
'cloudall': 88,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 14:00:00'),
'temp': 303.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.64,
'winddeg': 64,
'cloudall': 68,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 15:00:00'),
'temp': 303.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.65,
'winddeg': 93,
'cloudall': 62,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 16:00:00'),
'temp': 302.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 78,
'windspeed': 1.72,
'winddeg': 106,
'cloudall': 65,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 17:00:00'),
'temp': 301.2,
'pressure': 1011,
'grnd_level': None,
'humidity': 79,
'windspeed': 1.41,
'winddeg': 96,
'cloudall': 72,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 18:00:00'),
'temp': 302.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.46,
'winddeg': 83,
'cloudall': 81,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 19:00:00'),
'temp': 301.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.32,
'winddeg': 51,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 20:00:00'),
'temp': 301.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 81,
'windspeed': 1.37,
'winddeg': 14,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 21:00:00'),
'temp': 301.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 82,
'windspeed': 1.47,
'winddeg': 347,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 22:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.45,
'winddeg': 335,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-05 23:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 78,
'windspeed': 1.51,
'winddeg': 311,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 00:00:00'),
'temp': 300.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.01,
'winddeg': 349,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 01:00:00'),
'temp': 301.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.05,
'winddeg': 19,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 02:00:00'),
'temp': 302.09,
'pressure': 1013,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.08,
'winddeg': 31,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 03:00:00'),
'temp': 303.09,
'pressure': 1013,
'grnd_level': None,
'humidity': 66,
'windspeed': 1.32,
'winddeg': 40,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 04:00:00'),
'temp': 304.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 62,
'windspeed': 1.69,
'winddeg': 39,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 05:00:00'),
'temp': 304.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 59,
'windspeed': 1.92,
'winddeg': 28,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 06:00:00'),
'temp': 305.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 57,
'windspeed': 2.33,
'winddeg': 18,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 07:00:00'),
'temp': 306.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 55,
'windspeed': 2.36,
'winddeg': 8,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 08:00:00'),
'temp': 306.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 55,
'windspeed': 2.52,
'winddeg': 350,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 09:00:00'),
'temp': 306.09,
'pressure': 1007,
'grnd_level': None,
'humidity': 56,
'windspeed': 2.63,
'winddeg': 346,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 10:00:00'),
'temp': 305.09,
'pressure': 1008,
'grnd_level': None,
'humidity': 62,
'windspeed': 2.37,
'winddeg': 344,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 11:00:00'),
'temp': 306.09,
'pressure': 1009,
'grnd_level': None,
'humidity': 66,
'windspeed': 2.14,
'winddeg': 349,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 12:00:00'),
'temp': 304.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 69,
'windspeed': 2.62,
'winddeg': 8,
'cloudall': 97,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 13:00:00'),
'temp': 303.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 71,
'windspeed': 2.06,
'winddeg': 4,
'cloudall': 29,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 14:00:00'),
'temp': 303.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 73,
'windspeed': 1.59,
'winddeg': 355,
'cloudall': 50,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 15:00:00'),
'temp': 301.99,
'pressure': 1012,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.34,
'winddeg': 342,
'cloudall': 42,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 16:00:00'),
'temp': 301.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.15,
'winddeg': 339,
'cloudall': 51,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 17:00:00'),
'temp': 300.99,
'pressure': 1012,
'grnd_level': None,
'humidity': 78,
'windspeed': 1.05,
'winddeg': 352,
'cloudall': 44,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 18:00:00'),
'temp': 300.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 81,
'windspeed': 1.25,
'winddeg': 79,
'cloudall': 54,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 19:00:00'),
'temp': 299.3,
'pressure': 1010,
'grnd_level': None,
'humidity': 82,
'windspeed': 1.39,
'winddeg': 102,
'cloudall': 59,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 20:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 84,
'windspeed': 1.27,
'winddeg': 103,
'cloudall': 56,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 21:00:00'),
'temp': 300.09,
'pressure': 1010,
'grnd_level': None,
'humidity': 85,
'windspeed': 1.24,
'winddeg': 92,
'cloudall': 51,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 22:00:00'),
'temp': 300.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 86,
'windspeed': 1.27,
'winddeg': 59,
'cloudall': 56,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-06 23:00:00'),
'temp': 299.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 87,
'windspeed': 1.13,
'winddeg': 35,
'cloudall': 65,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 00:00:00'),
'temp': 298.9,
'pressure': 1012,
'grnd_level': None,
'humidity': 85,
'windspeed': 1.31,
'winddeg': 51,
'cloudall': 74,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 01:00:00'),
'temp': 299.95,
'pressure': 1013,
'grnd_level': None,
'humidity': 80,
'windspeed': 1.79,
'winddeg': 62,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 02:00:00'),
'temp': 301.21,
'pressure': 1014,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.69,
'winddeg': 36,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 03:00:00'),
'temp': 302.44,
'pressure': 1014,
'grnd_level': None,
'humidity': 69,
'windspeed': 1.73,
'winddeg': 11,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 04:00:00'),
'temp': 303.65,
'pressure': 1013,
'grnd_level': None,
'humidity': 64,
'windspeed': 1.91,
'winddeg': 19,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 05:00:00'),
'temp': 304.51,
'pressure': 1012,
'grnd_level': None,
'humidity': 60,
'windspeed': 2.07,
'winddeg': 30,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 06:00:00'),
'temp': 305.52,
'pressure': 1011,
'grnd_level': None,
'humidity': 55,
'windspeed': 2.22,
'winddeg': 46,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 07:00:00'),
'temp': 305.73,
'pressure': 1010,
'grnd_level': None,
'humidity': 54,
'windspeed': 2.08,
'winddeg': 60,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 08:00:00'),
'temp': 305.4,
'pressure': 1009,
'grnd_level': None,
'humidity': 55,
'windspeed': 1.88,
'winddeg': 72,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 09:00:00'),
'temp': 304.51,
'pressure': 1009,
'grnd_level': None,
'humidity': 60,
'windspeed': 1.55,
'winddeg': 70,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 10:00:00'),
'temp': 304.01,
'pressure': 1009,
'grnd_level': None,
'humidity': 64,
'windspeed': 1.29,
'winddeg': 36,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 11:00:00'),
'temp': 303.05,
'pressure': 1010,
'grnd_level': None,
'humidity': 68,
'windspeed': 2.21,
'winddeg': 17,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 12:00:00'),
'temp': 302.91,
'pressure': 1010,
'grnd_level': None,
'humidity': 68,
'windspeed': 2.3,
'winddeg': 26,
'cloudall': 95,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 13:00:00'),
'temp': 302.5,
'pressure': 1011,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.76,
'winddeg': 19,
'cloudall': 96,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 14:00:00'),
'temp': 305.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 72,
'windspeed': 1.72,
'winddeg': 10,
'cloudall': 97,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 15:00:00'),
'temp': 304.2,
'pressure': 1012,
'grnd_level': None,
'humidity': 74,
'windspeed': 1.41,
'winddeg': 357,
'cloudall': 74,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 16:00:00'),
'temp': 302.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 75,
'windspeed': 1.4,
'winddeg': 9,
'cloudall': 67,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 17:00:00'),
'temp': 302.3,
'pressure': 1012,
'grnd_level': None,
'humidity': 76,
'windspeed': 1.46,
'winddeg': 27,
'cloudall': 57,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 18:00:00'),
'temp': 302.3,
'pressure': 1011,
'grnd_level': None,
'humidity': 77,
'windspeed': 1.74,
'winddeg': 22,
'cloudall': 68,
'weathermain': 'Rain'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 19:00:00'),
'temp': 302.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 79,
'windspeed': 2.09,
'winddeg': 19,
'cloudall': 16,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 20:00:00'),
'temp': 301.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 81,
'windspeed': 2.05,
'winddeg': 12,
'cloudall': 19,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 21:00:00'),
'temp': 301.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.01,
'winddeg': 1,
'cloudall': 18,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 22:00:00'),
'temp': 301.2,
'pressure': 1010,
'grnd_level': None,
'humidity': 83,
'windspeed': 1.94,
'winddeg': 357,
'cloudall': 18,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-07 23:00:00'),
'temp': 301.09,
'pressure': 1011,
'grnd_level': None,
'humidity': 84,
'windspeed': 1.85,
'winddeg': 8,
'cloudall': 19,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-08 00:00:00'),
'temp': 301.09,
'pressure': 1012,
'grnd_level': None,
'humidity': 83,
'windspeed': 2.08,
'winddeg': 37,
'cloudall': 27,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-08 01:00:00'),
'temp': 301.2,
'pressure': 1013,
'grnd_level': None,
'humidity': 76,
'windspeed': 1.53,
'winddeg': 48,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-08 02:00:00'),
'temp': 303.09,
'pressure': 1013,
'grnd_level': None,
'humidity': 70,
'windspeed': 1.16,
'winddeg': 17,
'cloudall': 100,
'weathermain': 'Clouds'},
{'station': '3T',
'timestamp': Timestamp('2024-10-08 03:00:00'),
'temp': 304.09,
'pressure': 1013,
'grnd_level': None,
'humidity': 67,
'windspeed': 1.47,
'winddeg': 359,
'cloudall': 100,
'weathermain': 'Clouds'},
...]
all_df = pd.DataFrame(all_data)
all_df
| station | timestamp | temp | pressure | grnd_level | humidity | windspeed | winddeg | cloudall | weathermain | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 2024-05-04 17:00:00 | 305.44 | 1006 | None | 70 | 6.57 | 181 | 63 | Clouds |
| 1 | 3T | 2024-05-04 18:00:00 | 304.42 | 1006 | None | 68 | 6.04 | 179 | 68 | Clouds |
| 2 | 3T | 2024-05-04 19:00:00 | 304.42 | 1005 | None | 69 | 5.53 | 176 | 100 | Clouds |
| 3 | 3T | 2024-05-04 20:00:00 | 304.09 | 1004 | None | 69 | 5.03 | 174 | 100 | Clouds |
| 4 | 3T | 2024-05-04 21:00:00 | 304.52 | 1005 | None | 69 | 4.84 | 168 | 100 | Clouds |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 61T | 2025-04-06 13:00:00 | 303.12 | 1009 | None | 68 | 7.68 | 189 | 100 | Clouds |
| 14129 | 61T | 2025-04-06 14:00:00 | 303.12 | 1010 | None | 68 | 7.03 | 189 | 100 | Clouds |
| 14130 | 61T | 2025-04-06 15:00:00 | 303.12 | 1011 | None | 69 | 7.04 | 187 | 100 | Clouds |
| 14131 | 61T | 2025-04-06 16:00:00 | 303.12 | 1011 | None | 71 | 6.84 | 183 | 98 | Clouds |
| 14132 | 61T | 2025-04-06 17:00:00 | 302.12 | 1011 | None | 73 | 5.92 | 183 | 86 | Clouds |
14133 rows × 10 columns
all_df.drop(columns=['grnd_level'], inplace=True)
all_df.isna().sum()
station 0 timestamp 0 temp 0 pressure 0 humidity 0 windspeed 0 winddeg 0 cloudall 0 weathermain 0 dtype: int64
all_df.to_csv('../datasets/weather_historical_1y.csv', index=False)
Merge all required datasets¶
import pandas as pd
# Load Data
df_weather = pd.read_csv("../datasets/weather_historical_1y.csv")
df_variable = pd.read_csv("../datasets/variables.csv")
df_traffic = pd.read_csv("../datasets/traffic.csv")
# Fix column name issue in df_traffic (remove unwanted space)
df_traffic.rename(columns={"station ": "station"}, inplace=True)
# Convert timestamp to datetime format
df_weather["datetime"] = pd.to_datetime(df_weather["timestamp"])
# Extract relevant time features for merging with df_traffic
df_weather["day_of_week"] = df_weather["datetime"].dt.dayofweek # 0=Monday, 6=Sunday
df_weather["hour"] = df_weather["datetime"].dt.hour
# **Merge df_weather with df_traffic (keeping all rows from df_weather)**
df_merged = df_weather.merge(df_traffic, on=["station", "day_of_week", "hour"], how="left")
# **Merge with df_variable on 'station' (df_variable is a dictionary-like dataset)**
df_final = df_merged.merge(df_variable, on="station", how="left")
# Fill missing station-level attributes from df_variable
for col in ["sea_level", "population", "population_density", "household",
"household_density", "green_space", "green_space_area",
"factory_num", "factory_area"]:
df_final[col] = df_final.groupby("station")[col].transform("first")
# Drop duplicate records if needed
df_final = df_final.drop_duplicates(subset=["station", "datetime"], keep="first")
# Drop timestamp column
df_final.drop(columns=['timestamp'], inplace=True)
# Save the cleaned merged DataFrame
df_final.to_csv("../datasets/final_cleaned_merged_data.csv", index=False)
print("Cleaning & Merging Complete! Data saved as 'final_cleaned_merged_data.csv'")
Cleaning & Merging Complete! Data saved as 'final_cleaned_merged_data.csv'
df_final
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | traffic_level | sea_level | population | population_density | household | household_density | green_space | green_space_area | factory_num | factory_area | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 2 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 4 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 6 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 8 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 2 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 16147 | 61T | 303.12 | 1009 | 68 | 7.68 | 189 | 100 | Clouds | 2025-04-06 13:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 16148 | 61T | 303.12 | 1010 | 68 | 7.03 | 189 | 100 | Clouds | 2025-04-06 14:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 16149 | 61T | 303.12 | 1011 | 69 | 7.04 | 187 | 100 | Clouds | 2025-04-06 15:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 16150 | 61T | 303.12 | 1011 | 71 | 6.84 | 183 | 98 | Clouds | 2025-04-06 16:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 16151 | 61T | 302.12 | 1011 | 73 | 5.92 | 183 | 86 | Clouds | 2025-04-06 17:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
14133 rows × 21 columns
df_final.isna().sum()
station 0 temp 0 pressure 0 humidity 0 windspeed 0 winddeg 0 cloudall 0 weathermain 0 datetime 0 day_of_week 0 hour 0 traffic_level 0 sea_level 0 population 0 population_density 0 household 0 household_density 0 green_space 0 green_space_area 0 factory_num 0 factory_area 0 dtype: int64
df_final.shape
(14133, 21)
Load final dataset¶
# Load the datasets
df_final = pd.read_csv('../datasets/final_cleaned_merged_data.csv')
df_pollution = pd.read_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv')
# Convert datetime columns to datetime format for merging
df_final['datetime'] = pd.to_datetime(df_final['datetime'])
df_pollution['datetime'] = pd.to_datetime(df_pollution['datetime'])
# Merge the data on 'station' and 'datetime', left join
merged_df = df_final.merge(df_pollution, on=['station', 'datetime'], how='left')
df_pollution.shape
(62650, 11)
df_pollution
| Unnamed: 0 | datetime | station | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 2024-04-05 00:00:00 | 3T | 13.7563 | 100.5018 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 1 | 1 | 2024-04-05 00:00:00 | 5T | 13.7367 | 100.5231 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| 2 | 2 | 2024-04-05 00:00:00 | 10T | 13.7291 | 100.7750 | 24.00 | 64.58 | 6.68 | 12.34 | 36.84 | 487.33 |
| 3 | 3 | 2024-04-05 00:00:00 | 11T | 13.7898 | 100.4486 | 53.13 | 85.17 | 25.75 | 34.62 | 5.63 | 961.30 |
| 4 | 4 | 2024-04-05 00:00:00 | 12T | 13.8225 | 100.5147 | 60.38 | 105.99 | 46.73 | 42.84 | 0.17 | 1588.82 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 62645 | 62645 | 2025-04-12 21:00:00 | 10T | 13.7291 | 100.7750 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
| 62646 | 62646 | 2025-04-12 21:00:00 | 11T | 13.7898 | 100.4486 | 3.05 | 3.48 | 0.25 | 1.57 | 6.27 | 149.25 |
| 62647 | 62647 | 2025-04-12 21:00:00 | 12T | 13.8225 | 100.5147 | 4.75 | 5.61 | 0.59 | 2.80 | 6.24 | 200.72 |
| 62648 | 62648 | 2025-04-12 21:00:00 | 15T | 13.7083 | 100.3728 | 4.27 | 4.74 | 0.23 | 1.94 | 1.04 | 172.77 |
| 62649 | 62649 | 2025-04-12 21:00:00 | 61T | 13.6796 | 100.6067 | 1.83 | 2.21 | 0.27 | 1.19 | 11.53 | 125.59 |
62650 rows × 11 columns
#Check Shape for df_final
df_final.shape
(14133, 21)
df_final
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | traffic_level | sea_level | population | population_density | household | household_density | green_space | green_space_area | factory_num | factory_area | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 3 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 2 | 23 | 64468 | 9046.87 | 58039 | 0.81 | 10.77 | 0.10 | 112 | 123059 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 61T | 303.12 | 1009 | 68 | 7.68 | 189 | 100 | Clouds | 2025-04-06 13:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 14129 | 61T | 303.12 | 1010 | 68 | 7.03 | 189 | 100 | Clouds | 2025-04-06 14:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 14130 | 61T | 303.12 | 1011 | 69 | 7.04 | 187 | 100 | Clouds | 2025-04-06 15:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 14131 | 61T | 303.12 | 1011 | 71 | 6.84 | 183 | 98 | Clouds | 2025-04-06 16:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
| 14132 | 61T | 302.12 | 1011 | 73 | 5.92 | 183 | 86 | Clouds | 2025-04-06 17:00:00 | 6 | ... | 3 | 4 | 85345 | 4542.29 | 74932 | 0.40 | 5.08 | 0.02 | 302 | 631723 |
14133 rows × 21 columns
#Check Shape for merged_df
merged_df.shape
(14133, 30)
merged_df
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | factory_area | Unnamed: 0 | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 123059 | 4991.0 | 13.7563 | 100.5018 | 38.68 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 123059 | 4998.0 | 13.7563 | 100.5018 | 35.54 | 62.50 | 27.18 | 38.73 | 6.79 | 974.66 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 123059 | 5005.0 | 13.7563 | 100.5018 | 34.29 | 59.91 | 26.70 | 36.67 | 16.99 | 894.55 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 123059 | 5012.0 | 13.7563 | 100.5018 | 34.70 | 60.30 | 28.85 | 38.73 | 17.88 | 907.90 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 123059 | 5019.0 | 13.7563 | 100.5018 | 35.27 | 61.40 | 31.95 | 42.16 | 12.16 | 974.66 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 61T | 303.12 | 1009 | 68 | 7.68 | 189 | 100 | Clouds | 2025-04-06 13:00:00 | 6 | ... | 631723 | 61585.0 | 13.6796 | 100.6067 | 3.03 | 6.37 | 0.23 | 0.46 | 32.25 | 149.57 |
| 14129 | 61T | 303.12 | 1010 | 68 | 7.03 | 189 | 100 | Clouds | 2025-04-06 14:00:00 | 6 | ... | 631723 | 61592.0 | 13.6796 | 100.6067 | 3.29 | 7.00 | 0.27 | 0.59 | 30.47 | 154.53 |
| 14130 | 61T | 303.12 | 1011 | 69 | 7.04 | 187 | 100 | Clouds | 2025-04-06 15:00:00 | 6 | ... | 631723 | 61599.0 | 13.6796 | 100.6067 | 3.51 | 7.41 | 0.29 | 0.70 | 29.10 | 158.59 |
| 14131 | 61T | 303.12 | 1011 | 71 | 6.84 | 183 | 98 | Clouds | 2025-04-06 16:00:00 | 6 | ... | 631723 | 61606.0 | 13.6796 | 100.6067 | 3.67 | 7.63 | 0.28 | 0.78 | 27.95 | 160.56 |
| 14132 | 61T | 302.12 | 1011 | 73 | 5.92 | 183 | 86 | Clouds | 2025-04-06 17:00:00 | 6 | ... | 631723 | 61613.0 | 13.6796 | 100.6067 | 3.81 | 7.83 | 0.24 | 0.81 | 27.31 | 161.98 |
14133 rows × 30 columns
merged_df.isna().sum()
station 0 temp 0 pressure 0 humidity 0 windspeed 0 winddeg 0 cloudall 0 weathermain 0 datetime 0 day_of_week 0 hour 0 traffic_level 0 sea_level 0 population 0 population_density 0 household 0 household_density 0 green_space 0 green_space_area 0 factory_num 0 factory_area 0 Unnamed: 0 1232 lat 1232 lon 1232 pm2_5 1232 pm10 1232 so2 1232 no2 1232 o3 1232 co 1232 dtype: int64
# Drop the 'Unnamed: 0' column if it exists
merged_df = merged_df.drop(columns=['Unnamed: 0'], errors='ignore')
# Save the merged dataset as master_dataset.csv
merged_df.to_csv('../datasets/master_dataset.csv', index=False)
merged_df.isna().sum()
station 0 temp 0 pressure 0 humidity 0 windspeed 0 winddeg 0 cloudall 0 weathermain 0 datetime 0 day_of_week 0 hour 0 traffic_level 0 sea_level 0 population 0 population_density 0 household 0 household_density 0 green_space 0 green_space_area 0 factory_num 0 factory_area 0 lat 1232 lon 1232 pm2_5 1232 pm10 1232 so2 1232 no2 1232 o3 1232 co 1232 dtype: int64
df = pd.read_csv('../datasets/master_dataset.csv')
df
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | factory_num | factory_area | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 112 | 123059 | 13.7563 | 100.5018 | 38.68 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 112 | 123059 | 13.7563 | 100.5018 | 35.54 | 62.50 | 27.18 | 38.73 | 6.79 | 974.66 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 112 | 123059 | 13.7563 | 100.5018 | 34.29 | 59.91 | 26.70 | 36.67 | 16.99 | 894.55 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 112 | 123059 | 13.7563 | 100.5018 | 34.70 | 60.30 | 28.85 | 38.73 | 17.88 | 907.90 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 112 | 123059 | 13.7563 | 100.5018 | 35.27 | 61.40 | 31.95 | 42.16 | 12.16 | 974.66 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 61T | 303.12 | 1009 | 68 | 7.68 | 189 | 100 | Clouds | 2025-04-06 13:00:00 | 6 | ... | 302 | 631723 | 13.6796 | 100.6067 | 3.03 | 6.37 | 0.23 | 0.46 | 32.25 | 149.57 |
| 14129 | 61T | 303.12 | 1010 | 68 | 7.03 | 189 | 100 | Clouds | 2025-04-06 14:00:00 | 6 | ... | 302 | 631723 | 13.6796 | 100.6067 | 3.29 | 7.00 | 0.27 | 0.59 | 30.47 | 154.53 |
| 14130 | 61T | 303.12 | 1011 | 69 | 7.04 | 187 | 100 | Clouds | 2025-04-06 15:00:00 | 6 | ... | 302 | 631723 | 13.6796 | 100.6067 | 3.51 | 7.41 | 0.29 | 0.70 | 29.10 | 158.59 |
| 14131 | 61T | 303.12 | 1011 | 71 | 6.84 | 183 | 98 | Clouds | 2025-04-06 16:00:00 | 6 | ... | 302 | 631723 | 13.6796 | 100.6067 | 3.67 | 7.63 | 0.28 | 0.78 | 27.95 | 160.56 |
| 14132 | 61T | 302.12 | 1011 | 73 | 5.92 | 183 | 86 | Clouds | 2025-04-06 17:00:00 | 6 | ... | 302 | 631723 | 13.6796 | 100.6067 | 3.81 | 7.83 | 0.24 | 0.81 | 27.31 | 161.98 |
14133 rows × 29 columns
df.columns
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
'traffic_level', 'sea_level', 'population', 'population_density',
'household', 'household_density', 'green_space', 'green_space_area',
'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
'no2', 'o3', 'co'],
dtype='object')
6. Explanatory Data Analysis¶
# Add more feature about time
df['datetime'] = pd.to_datetime(df['datetime'])
# Extract hour as 'time'
df['hour'] = df['datetime'].dt.hour
# Extract month
df['month'] = df['datetime'].dt.month
# Extract day of the week as a number (0 as Monday to 6 as Sunday)
df['day_of_week'] = df['datetime'].dt.dayofweek
# Display the updated DataFrame
df.head()
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | factory_area | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 38.68 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 | 5 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 35.54 | 62.50 | 27.18 | 38.73 | 6.79 | 974.66 | 5 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 34.29 | 59.91 | 26.70 | 36.67 | 16.99 | 894.55 | 5 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 34.70 | 60.30 | 28.85 | 38.73 | 17.88 | 907.90 | 5 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 35.27 | 61.40 | 31.95 | 42.16 | 12.16 | 974.66 | 5 |
5 rows × 30 columns
df_variable = pd.read_csv('../datasets/variables.csv',header=0)
df.head()
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | factory_area | lat | lon | pm2_5 | pm10 | so2 | no2 | o3 | co | month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 38.68 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 | 5 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 35.54 | 62.50 | 27.18 | 38.73 | 6.79 | 974.66 | 5 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 34.29 | 59.91 | 26.70 | 36.67 | 16.99 | 894.55 | 5 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 34.70 | 60.30 | 28.85 | 38.73 | 17.88 | 907.90 | 5 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 123059 | 13.7563 | 100.5018 | 35.27 | 61.40 | 31.95 | 42.16 | 12.16 | 974.66 | 5 |
5 rows × 30 columns
def map_season(month):
if 3 <= month <= 4:
return 'Hot Season'
elif 5 <= month <= 10:
return 'Rainy Season'
else:
return 'Cool Season'
# Apply the function to create a new 'season' column
df['season'] = df['month'].apply(map_season)
# 🔹 Ensure all seasons exist (even if missing in dataset)
expected_seasons = ["season_Hot Season", "season_Rainy Season"]
# Perform one-hot encoding
season_dummies = pd.get_dummies(df["season"], prefix="season")
# Add missing columns (if not generated)
for col in expected_seasons:
if col not in season_dummies:
season_dummies[col] = 0 # Fill missing season columns with 0
# Ensure all dummy columns are int type (not bool)
season_dummies = season_dummies.astype(int)
# Concatenate the encoded season features back to the dataset
df = pd.concat([df, season_dummies], axis=1)
df.columns
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
'traffic_level', 'sea_level', 'population', 'population_density',
'household', 'household_density', 'green_space', 'green_space_area',
'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season'],
dtype='object')
df.head()
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | pm10 | so2 | no2 | o3 | co | month | season | season_Cool Season | season_Hot Season | season_Rainy Season | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 | 5 | Rainy Season | 0 | 0 | 1 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 62.50 | 27.18 | 38.73 | 6.79 | 974.66 | 5 | Rainy Season | 0 | 0 | 1 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 59.91 | 26.70 | 36.67 | 16.99 | 894.55 | 5 | Rainy Season | 0 | 0 | 1 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 60.30 | 28.85 | 38.73 | 17.88 | 907.90 | 5 | Rainy Season | 0 | 0 | 1 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 61.40 | 31.95 | 42.16 | 12.16 | 974.66 | 5 | Rainy Season | 0 | 0 | 1 |
5 rows × 34 columns
# Ensure 'df' is a DataFrame
if not isinstance(df, pd.DataFrame):
raise TypeError("df is not a DataFrame. Ensure it is correctly loaded.")
# Check if 'season' and 'pm2_5' exist
if 'season' not in df.columns or 'pm2_5' not in df.columns:
raise KeyError("Ensure 'season' and 'pm2_5' exist in df.")
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 14133 entries, 0 to 14132 Data columns (total 34 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 station 14133 non-null object 1 temp 14133 non-null float64 2 pressure 14133 non-null int64 3 humidity 14133 non-null int64 4 windspeed 14133 non-null float64 5 winddeg 14133 non-null int64 6 cloudall 14133 non-null int64 7 weathermain 14133 non-null object 8 datetime 14133 non-null datetime64[ns] 9 day_of_week 14133 non-null int32 10 hour 14133 non-null int32 11 traffic_level 14133 non-null int64 12 sea_level 14133 non-null int64 13 population 14133 non-null int64 14 population_density 14133 non-null float64 15 household 14133 non-null int64 16 household_density 14133 non-null float64 17 green_space 14133 non-null float64 18 green_space_area 14133 non-null float64 19 factory_num 14133 non-null int64 20 factory_area 14133 non-null int64 21 lat 12901 non-null float64 22 lon 12901 non-null float64 23 pm2_5 12901 non-null float64 24 pm10 12901 non-null float64 25 so2 12901 non-null float64 26 no2 12901 non-null float64 27 o3 12901 non-null float64 28 co 12901 non-null float64 29 month 14133 non-null int32 30 season 14133 non-null object 31 season_Cool Season 14133 non-null int64 32 season_Hot Season 14133 non-null int64 33 season_Rainy Season 14133 non-null int64 dtypes: datetime64[ns](1), float64(14), int32(3), int64(13), object(3) memory usage: 3.5+ MB
# Group by season and calculate the mean
seasonal_pm25 = df.groupby('season', as_index=False)['pm2_5'].mean()
# Ensure it is a DataFrame
if not isinstance(seasonal_pm25, pd.DataFrame):
raise TypeError("seasonal_pm25 is not a DataFrame after groupby operation.")
# Create a bar plot
plt.figure(figsize=(10, 5))
plt.bar(seasonal_pm25['season'], seasonal_pm25['pm2_5'], color=['blue', 'orange', 'green', 'red'])
plt.title('Average PM2.5 Levels by Season')
plt.xlabel('Season')
plt.ylabel('Average PM2.5 Levels')
plt.xticks(rotation=45)
plt.show()
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 14133 entries, 0 to 14132 Data columns (total 34 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 station 14133 non-null object 1 temp 14133 non-null float64 2 pressure 14133 non-null int64 3 humidity 14133 non-null int64 4 windspeed 14133 non-null float64 5 winddeg 14133 non-null int64 6 cloudall 14133 non-null int64 7 weathermain 14133 non-null object 8 datetime 14133 non-null datetime64[ns] 9 day_of_week 14133 non-null int32 10 hour 14133 non-null int32 11 traffic_level 14133 non-null int64 12 sea_level 14133 non-null int64 13 population 14133 non-null int64 14 population_density 14133 non-null float64 15 household 14133 non-null int64 16 household_density 14133 non-null float64 17 green_space 14133 non-null float64 18 green_space_area 14133 non-null float64 19 factory_num 14133 non-null int64 20 factory_area 14133 non-null int64 21 lat 12901 non-null float64 22 lon 12901 non-null float64 23 pm2_5 12901 non-null float64 24 pm10 12901 non-null float64 25 so2 12901 non-null float64 26 no2 12901 non-null float64 27 o3 12901 non-null float64 28 co 12901 non-null float64 29 month 14133 non-null int32 30 season 14133 non-null object 31 season_Cool Season 14133 non-null int64 32 season_Hot Season 14133 non-null int64 33 season_Rainy Season 14133 non-null int64 dtypes: datetime64[ns](1), float64(14), int32(3), int64(13), object(3) memory usage: 3.5+ MB
df.columns
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
'traffic_level', 'sea_level', 'population', 'population_density',
'household', 'household_density', 'green_space', 'green_space_area',
'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season'],
dtype='object')
Inspect PM2.5¶
Green Space Distribution By Station¶
green_space_per_station = df.groupby('station')['green_space'].mean().reset_index()
# Create the bar graph
plt.figure(figsize=(10, 5))
sns.barplot(x='station', y='green_space', data=green_space_per_station)
plt.title('Green Space Distribution by Station')
plt.xlabel('Station')
plt.ylabel('Average Green Space')
plt.xticks(rotation=45) # Rotate station names for better readability
plt.show()
Distribution of PM2.5 Values¶
# Create histogram for PM2.5 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['pm2_5'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of PM₂.₅ Values')
plt.xlabel('PM₂.₅ Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average PM2.5 Level Per Month¶
# Calculate average PM2.5 per month (Bar Graph)
average_pm25_per_month = df.groupby('month')['pm2_5'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_pm25_per_month, x='month', y='pm2_5')
plt.title('Average PM₂.₅ Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
# Calculate average PM2.5 per month (Line Plot)
average_pm25_per_month = df.groupby('month')['pm2_5'].mean().reset_index()
# Create Line Plot
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_pm25_per_month, x='month', y='pm2_5', marker='o', color='green')
plt.title('Monthly PM₂.₅ Trends')
plt.xlabel('Month')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
Hourly Distribution of PM2.5¶
#Hourly Distribution of PM2.5 throughout the day
hourly_pm25_trends = df.groupby('hour')['pm2_5'].mean().reset_index()
# Create Line Plot
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_pm25_trends, x='hour', y='pm2_5', marker='o', color='skyblue')
plt.title('Hourly PM₂.₅ Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
Distribution Per Day Throughtout the Week (0-Monday & 6-Sunday)¶
# Bar plot for PM2.5 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='pm2_5', palette='coolwarm')
plt.title('PM₂.₅ Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('PM₂.₅ Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1072736171.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='pm2_5', palette='coolwarm')
Green Space and PM2.5 Levels Per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'pm10': 'mean' # Average PM2.5 levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'pm10' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['pm10'], bar_width, label='PM2.5')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and PM2.5 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show Graph
plt.tight_layout()
plt.show()
Average PM2.5 Level By Green Space¶
average_pm25_by_greenspace = df.groupby('green_space')['pm2_5'].mean().reset_index()
average_pm25_by_greenspace = average_pm25_by_greenspace.sort_values('green_space')
# Create a line plot for the average PM2.5 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='pm2_5', data=average_pm25_by_greenspace, marker='o', color='blue')
plt.title('Average PM2.5 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average PM2.5 Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect PM10¶
Distribution of PM10 Values¶
# Create histogram for pm10 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['pm10'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of pm10 Values')
plt.xlabel('pm10 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average PM10 Levels Per Month¶
# Calculate average pm10 per month
average_pm10_per_month = df.groupby('month')['pm10'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_pm10_per_month, x='month', y='pm10')
plt.title('Average pm10 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
#Montly Trend PM10 Distribution
average_pm10_per_month = df.groupby('month')['pm10'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_pm10_per_month, x='month', y='pm10', marker='o', color='green')
plt.title('Monthly pm10 Trends')
plt.xlabel('Month')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
Hourly Distribution of PM10¶
hourly_pm10_trends = df.groupby('hour')['pm10'].mean().reset_index()
# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_pm10_trends, x='hour', y='pm10', marker='o', color='skyblue')
plt.title('Hourly pm10 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
PM10 Distribution Per Day of the Week (0-Monday & 6-Sunday)¶
# Bar plot for pm10 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='pm10', palette='coolwarm')
plt.title('pm10 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('pm10 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\693026414.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='pm10', palette='coolwarm')
Green Space and PM10 Levels per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'pm10': 'mean' # Average pm10 levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'pm10' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['pm10'], bar_width, label='pm10')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and pm10 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show the plot
plt.tight_layout()
plt.show()
Average PM10 Levels by Green Space¶
average_pm10_by_greenspace = df.groupby('green_space')['pm10'].mean().reset_index()
average_pm10_by_greenspace = average_pm10_by_greenspace.sort_values('green_space')
# Create a line plot for the average pm10 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='pm10', data=average_pm10_by_greenspace, marker='o', color='blue')
plt.title('Average pm10 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average pm10 Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect Sulfur dioxide(SO2)¶
Distribution of SO2 Values¶
# Create histogram for so2 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['so2'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of so2 Values')
plt.xlabel('so2 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average Distribution of SO2 Levels per Month¶
# Calculate average so2 per month
average_so2_per_month = df.groupby('month')['so2'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_so2_per_month, x='month', y='so2')
plt.title('Average SO2 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average SO2 Levels')
plt.grid(True)
plt.show()
#Trends of Montly SO2 Distribution
average_so2_per_month = df.groupby('month')['so2'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_so2_per_month, x='month', y='so2', marker='o', color='green')
plt.title('Monthly so2 Trends')
plt.xlabel('Month')
plt.ylabel('Average so2 Levels')
plt.grid(True)
plt.show()
Hourly Distribution of SO2¶
hourly_so2_trends = df.groupby('hour')['so2'].mean().reset_index()
# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_so2_trends, x='hour', y='so2', marker='o', color='skyblue')
plt.title('Hourly so2 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average so2 Levels')
plt.grid(True)
plt.show()
Distributuion of SO2 Per Day of the Week (0-Monday & 6-Sunday)¶
# Bar plot for so2 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='so2', palette='coolwarm')
plt.title('so2 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('so2 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1278283898.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='so2', palette='coolwarm')
Green Space and SO2 Levels Per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'so2': 'mean' # Average so2 levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'so2' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['so2'], bar_width, label='so2')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and so2 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show the plot
plt.tight_layout()
plt.show()
Average SO2 Levels by Green Space¶
average_so2_by_greenspace = df.groupby('green_space')['so2'].mean().reset_index()
average_so2_by_greenspace = average_so2_by_greenspace.sort_values('green_space')
# Create a line plot for the average so2 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='so2', data=average_so2_by_greenspace, marker='o', color='blue')
plt.title('Average so2 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average so2 Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect Nitrogen dioxide (NO2)¶
Distributuon of NO2 Values¶
# Create histogram for no2 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['no2'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of NO2 Values')
plt.xlabel('NO2 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average Distributuon of NO2 Levels per Month¶
# Calculate average no2 per month
average_no2_per_month = df.groupby('month')['no2'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_no2_per_month, x='month', y='no2')
plt.title('Average NO2 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average NO2 Levels')
plt.grid(True)
plt.show()
# You can reuse average_no2_per_month calculated previously
average_no2_per_month = df.groupby('month')['no2'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_no2_per_month, x='month', y='no2', marker='o', color='green')
plt.title('Monthly no2 Trends')
plt.xlabel('Month')
plt.ylabel('Average no2 Levels')
plt.grid(True)
plt.show()
Hourly Distribution of NO2 Trend¶
hourly_no2_trends = df.groupby('hour')['no2'].mean().reset_index()
# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_no2_trends, x='hour', y='no2', marker='o', color='skyblue')
plt.title('Hourly no2 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average no2 Levels')
plt.grid(True)
plt.show()
NO2 Distribution Per Day of the Week (0-Monday & 6-Sunday)¶
# Bar plot for no2 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='no2', palette='coolwarm')
plt.title('NO2 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('NO2 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1610298790.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='no2', palette='coolwarm')
Green Space and NO2 Levels Per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'no2': 'mean' # Average no2 levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'no2' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['no2'], bar_width, label='no2')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and no2 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show the plot
plt.tight_layout()
plt.show()
Average NO2 Levels by Green Space¶
average_no2_by_greenspace = df.groupby('green_space')['no2'].mean().reset_index()
average_no2_by_greenspace = average_no2_by_greenspace.sort_values('green_space')
# Create a line plot for the average no2 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='no2', data=average_no2_by_greenspace, marker='o', color='blue')
plt.title('Average no2 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average no2 Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect Ozone Level(O3)¶
Distribution of O3 Values¶
# Create histogram for o3 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['o3'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of O3 Values')
plt.xlabel('O3 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average O3 Level Per Month¶
# Calculate average o3 per month
average_o3_per_month = df.groupby('month')['o3'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_o3_per_month, x='month', y='o3')
plt.title('Average O3 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
# You can reuse average_o3_per_month calculated previously
average_o3_per_month = df.groupby('month')['o3'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_o3_per_month, x='month', y='o3', marker='o', color='green')
plt.title('Monthly O3 Trends')
plt.xlabel('Month')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
Average Hourly O3 Trends¶
hourly_o3_trends = df.groupby('hour')['o3'].mean().reset_index()
# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_o3_trends, x='hour', y='o3', marker='o', color='skyblue')
plt.title('Hourly O3 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
O3 Distribution per Day of the Week (0-Monday & 6-Sunday)¶
# Bar plot for o3 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='o3', palette='coolwarm')
plt.title('O3 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('O3 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\605535918.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='o3', palette='coolwarm')
Green Space nad O3 Levels Per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'o3': 'mean' # Average o3 levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'o3' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['o3'], bar_width, label='o3')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and O3 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show the plot
plt.tight_layout()
plt.show()
Average O3 Levels by Green Space¶
average_o3_by_greenspace = df.groupby('green_space')['o3'].mean().reset_index()
average_o3_by_greenspace = average_o3_by_greenspace.sort_values('green_space')
# Create a line plot for the average o3 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='o3', data=average_o3_by_greenspace, marker='o', color='blue')
plt.title('Average O3 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average O3 Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect Carbon Monoxide(CO)¶
Distribution of CO Values¶
# Create histogram for co distribution
plt.figure(figsize=(10, 5))
plt.hist(df['co'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of CO Values')
plt.xlabel('CO Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
Average CO Levels Per Month¶
# Calculate average co per month
average_co_per_month = df.groupby('month')['co'].mean().reset_index()
# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_co_per_month, x='month', y='co')
plt.title('Average CO Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
# You can reuse average_co_per_month calculated previously
average_co_per_month = df.groupby('month')['co'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_co_per_month, x='month', y='co', marker='o', color='green')
plt.title('Monthly CO Trends')
plt.xlabel('Month')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
Hourly Distribution of CO Trends¶
hourly_co_trends = df.groupby('hour')['co'].mean().reset_index()
# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_co_trends, x='hour', y='co', marker='o', color='skyblue')
plt.title('Hourly CO Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
CO Distribution Per Day of the Week¶
# Bar plot for co distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='co', palette='coolwarm')
plt.title('CO Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('CO Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\313729694.py:3: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(data=df, x='day_of_week', y='co', palette='coolwarm')
Green Space and CO Levels Per Station¶
station_stats = df.groupby('station').agg({
'green_space': 'mean', # Average or sum of green space per station
'co': 'mean' # Average co levels per station
}).reset_index()
# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))
# Plotting both 'green_space' and 'co' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['co'], bar_width, label='co')
# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and CO Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()
# Show the plot
plt.tight_layout()
plt.show()
Average CO Levels By Green Space¶
average_co_by_greenspace = df.groupby('green_space')['co'].mean().reset_index()
average_co_by_greenspace = average_co_by_greenspace.sort_values('green_space')
# Create a line plot for the average co levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='co', data=average_co_by_greenspace, marker='o', color='blue')
plt.title('Average co Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average co Level')
plt.grid(True) # Optional: Adds a grid for better readability
plt.show()
Inspect Other Variables¶
Average PM2.5 Levels by Traffic Level¶
# Calculate the average PM2.5 for each traffic level
avg_pm25_by_traffic = df.groupby('traffic_level')['pm2_5'].mean().reset_index()
# Create a bar plot
plt.figure(figsize=(8, 6))
sns.barplot(x='traffic_level', y='pm2_5', data=avg_pm25_by_traffic, palette="Blues_d")
# Add labels and title
plt.xlabel('Traffic Level (1 = No Traffic, 4 = Heavy Traffic)')
plt.ylabel('Average PM2.5 Level (µg/m³)')
plt.title('Average PM2.5 Levels by Traffic Level')
# Show the plot
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1396813456.py:6: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. sns.barplot(x='traffic_level', y='pm2_5', data=avg_pm25_by_traffic, palette="Blues_d")
Traffic Level by Hour of the Day¶
# Create a line plot for Traffic Level by Hour
plt.figure(figsize=(10, 6))
sns.lineplot(x='hour', y='traffic_level', data=df, marker='o', color='b')
# Label the axes and the plot
plt.xlabel('Hour of the Day')
plt.ylabel('Traffic Level')
plt.title('Traffic Level by Hour of the Day')
# Show grid for better readability
plt.grid(True)
# Show the plot
plt.show()
Analyzing Correlation Correlation between PM2.5 and Other Air Quality Indices (PM10, SO2, NO2, O3, CO)'¶
Correlation Plot between PM10 and PM2.5¶
# Create the regression plot for pm10 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['pm10'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("PM10")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of PM10 vs PM2.5 (Correlation: {df['pm10'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
Correlation Plot between SO2 and PM2.5¶
# Create the regression plot for so2 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['so2'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("SO2")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of SO2 vs PM2.5 (Correlation: {df['so2'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
Correlation Plot between NO2 and PM2.5¶
# Create the regression plot for no2 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['no2'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("NO2")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of NO2 vs PM2.5 (Correlation: {df['no2'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
Correlation Plot between O3 and PM2.5¶
# Create the regression plot for o3 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['o3'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("O3")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of O3 vs PM2.5 (Correlation: {df['o3'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
Correlation Plot between CO and PM2.5¶
# Create the regression plot for co vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['co'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("CO")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of CO vs PM2.5 (Correlation: {df['co'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
We need to use these analysis¶
- Trend analysis
- Cyclicity analysis
- Seasonal analysis
# Selected features for heatmap correlation analysis
selected_cols = ['pm2_5', 'pm10', 'so2', 'no2', 'o3', 'co', 'sea_level','temp','humidity','hour','month','day_of_week', 'population_density', 'household_density','green_space_area','factory_num', 'factory_area', 'season_Hot Season', 'season_Rainy Season','season_Cool Season']
Heatmap with pearson method: Good for linear relationship¶
corr_matrix = df[selected_cols].corr(method='pearson')
corr_matrix
# Plotting the heatmap for numerical columns
plt.figure(figsize=(18,12))
sns.heatmap(data=corr_matrix, cmap='coolwarm', fmt=' .2f', annot=True, linewidths=1.5)
plt.show()
Heatmap with spearman method: Good for non-linear relationship¶
corr_matrix = df[selected_cols].corr(method='spearman')
corr_matrix
# Plotting the heatmap for numerical columns
plt.figure(figsize=(18,12))
sns.heatmap(data=corr_matrix, cmap='coolwarm', fmt=' .2f', annot=True, linewidths=1.5)
plt.show()
We use spearman method of correlation¶
- Because we are relying on rendom forest, XGBoost, Decision Tree!
- This is the non-parametric method!
- And we will compare performance for these 3 models (non-parametric method) to Linear models like Linear Regression, Ridge, Lasso Regression (Parametric method), and non-machine-learning method such as moving average to make sure that our assumption of non-parametric method is the best suited for PM2.5 prediction
- Additionally, spearman (non-linear relation) captures relationship better than pearson (Linear relation)
7. Feature selection¶
Choose the most salient X¶
- Rule of thumb: Good features MUST NOT BE correlated, i.e., independent
- Rule of thumb: Correlation is not causation; don’t pick features using correlation only; it should make sense!
- Rule of thumb: For ML, less features are usually better (but NOT necessarily for DL)
Specify the y¶
Split train / test¶
average_no2_per_month# 🔹 Ensure all expected stations exist (even if missing in df)
expected_stations = ['3T', '5T', '10T', '11T', '12T', '15T', '61T'] # include all known stations
# Perform one-hot encoding
station_dummies = pd.get_dummies(df["station"], prefix="station")
# Add missing station columns (if not present in df)
for col in expected_stations:
dummy_col = f'station_{col}'
if dummy_col not in station_dummies:
station_dummies[dummy_col] = 0 # Fill missing station columns with 0
# Ensure all dummy columns are int type
station_dummies = station_dummies.astype(int)
# Concatenate the encoded station features back to the dataset
df = pd.concat([df, station_dummies], axis=1)
df
| station | temp | pressure | humidity | windspeed | winddeg | cloudall | weathermain | datetime | day_of_week | ... | season_Cool Season | season_Hot Season | season_Rainy Season | station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3T | 305.44 | 1006 | 70 | 6.57 | 181 | 63 | Clouds | 2024-05-04 17:00:00 | 5 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 1 | 3T | 304.42 | 1006 | 68 | 6.04 | 179 | 68 | Clouds | 2024-05-04 18:00:00 | 5 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 2 | 3T | 304.42 | 1005 | 69 | 5.53 | 176 | 100 | Clouds | 2024-05-04 19:00:00 | 5 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 3 | 3T | 304.09 | 1004 | 69 | 5.03 | 174 | 100 | Clouds | 2024-05-04 20:00:00 | 5 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 4 | 3T | 304.52 | 1005 | 69 | 4.84 | 168 | 100 | Clouds | 2024-05-04 21:00:00 | 5 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 61T | 303.12 | 1009 | 68 | 7.68 | 189 | 100 | Clouds | 2025-04-06 13:00:00 | 6 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 14129 | 61T | 303.12 | 1010 | 68 | 7.03 | 189 | 100 | Clouds | 2025-04-06 14:00:00 | 6 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 14130 | 61T | 303.12 | 1011 | 69 | 7.04 | 187 | 100 | Clouds | 2025-04-06 15:00:00 | 6 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 14131 | 61T | 303.12 | 1011 | 71 | 6.84 | 183 | 98 | Clouds | 2025-04-06 16:00:00 | 6 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 14132 | 61T | 302.12 | 1011 | 73 | 5.92 | 183 | 86 | Clouds | 2025-04-06 17:00:00 | 6 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
14133 rows × 41 columns
df.columns
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
'traffic_level', 'sea_level', 'population', 'population_density',
'household', 'household_density', 'green_space', 'green_space_area',
'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season', 'station_10T',
'station_11T', 'station_12T', 'station_15T', 'station_3T', 'station_5T',
'station_61T'],
dtype='object')
df['station'].unique()
array(['3T', '5T', '10T', '11T', '12T', '15T', '61T'], dtype=object)
for col in df.columns:
if df[col].nunique() == 1:
print(f"⚠️ '{col}' has only one unique value in test set: {df[col].unique()[0]}")
features = df[['station', 'temp','population_density','factory_area','season_Cool Season','season_Hot Season','season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co']]
target = df['pm2_5']
Split X and y features (Time-Aware Style)¶
df['population_density'].unique()
array([ 9046.87, 4788.74, 1452.45, 3437.36, 10275.79, 4324.14,
4542.29])
df_sorted = df.sort_values(by=['datetime', 'station']).reset_index(drop=True)
int(len(features) * 0.9)
12719
target.isna().sum()
np.int64(1232)
df_sorted.isna().sum()
station 0 temp 0 pressure 0 humidity 0 windspeed 0 winddeg 0 cloudall 0 weathermain 0 datetime 0 day_of_week 0 hour 0 traffic_level 0 sea_level 0 population 0 population_density 0 household 0 household_density 0 green_space 0 green_space_area 0 factory_num 0 factory_area 0 lat 1232 lon 1232 pm2_5 1232 pm10 1232 so2 1232 no2 1232 o3 1232 co 1232 month 0 season 0 season_Cool Season 0 season_Hot Season 0 season_Rainy Season 0 station_10T 0 station_11T 0 station_12T 0 station_15T 0 station_3T 0 station_5T 0 station_61T 0 dtype: int64
df_sorted.dropna(inplace=True)
features = df_sorted[['station_10T', 'station_11T', 'station_12T', 'station_15T', 'station_3T', 'station_5T',
'station_61T', 'temp','population_density','factory_area',
'season_Cool Season','season_Hot Season','season_Rainy Season',
'pm10', 'so2', 'no2', 'o3', 'co']]
target = df_sorted['pm2_5']
split_point = int(len(features) * 0.9)
X_train = features.iloc[:split_point]
X_test = features.iloc[split_point:]
y_train = target.iloc[:split_point]
y_test = target.iloc[split_point:]
for col in X_test.columns:
if X_test[col].nunique() == 1:
print(f"⚠️ '{col}' has only one unique value in test set: {X_test[col].unique()[0]}")
⚠️ 'season_Rainy Season' has only one unique value in test set: 0
print("Train unique pop_density:", X_train['population_density'].nunique())
print("Test unique pop_density:", X_test['population_density'].nunique())
Train unique pop_density: 7 Test unique pop_density: 7
print("X_train shape:", X_train.shape)
print("X_test shape:", X_test.shape)
X_train shape: (11610, 18) X_test shape: (1291, 18)
print("y_train shape:", y_train.shape)
print("y_test shape:", y_test.shape)
y_train shape: (11610,) y_test shape: (1291,)
X_train
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 305.04 | 1452.45 | 4770457 | 0 | 0 | 1 | 48.05 | 5.96 | 12.51 | 41.13 | 467.30 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 306.10 | 3437.36 | 144736 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 305.70 | 10275.79 | 297638 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 306.66 | 4324.14 | 1148799 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 305.44 | 9046.87 | 123059 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 301.12 | 4542.29 | 631723 | 1 | 0 | 0 | 170.51 | 28.37 | 106.93 | 5.54 | 2643.59 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 300.12 | 1452.45 | 4770457 | 1 | 0 | 0 | 151.00 | 9.30 | 50.04 | 16.63 | 1668.93 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.93 | 3437.36 | 144736 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 299.74 | 10275.79 | 297638 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 300.15 | 4324.14 | 1148799 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
11610 rows × 18 columns
X_test
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 300.20 | 9046.87 | 123059 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11611 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 300.20 | 4788.74 | 54185 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11612 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 300.88 | 4542.29 | 631723 | 1 | 0 | 0 | 142.15 | 24.56 | 94.59 | 7.60 | 2296.45 |
| 11613 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 299.25 | 1452.45 | 4770457 | 1 | 0 | 0 | 142.83 | 7.39 | 45.93 | 20.74 | 1575.47 |
| 11614 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.10 | 3437.36 | 144736 | 1 | 0 | 0 | 329.52 | 70.57 | 149.43 | 0.00 | 6408.69 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 302.13 | 10275.79 | 297638 | 0 | 1 | 0 | 8.23 | 0.29 | 1.01 | 26.25 | 168.04 |
| 14129 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 302.07 | 4324.14 | 1148799 | 0 | 1 | 0 | 7.55 | 0.31 | 1.48 | 19.02 | 173.68 |
| 14130 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 302.09 | 9046.87 | 123059 | 0 | 1 | 0 | 8.23 | 0.29 | 1.01 | 26.25 | 168.04 |
| 14131 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 302.09 | 4788.74 | 54185 | 0 | 1 | 0 | 8.23 | 0.29 | 1.01 | 26.25 | 168.04 |
| 14132 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 302.12 | 4542.29 | 631723 | 0 | 1 | 0 | 7.83 | 0.24 | 0.81 | 27.31 | 161.98 |
1291 rows × 18 columns
y_train
0 20.68
1 31.13
2 38.68
3 31.13
4 38.68
...
11605 99.46
11606 81.52
11607 214.77
11608 144.39
11609 214.77
Name: pm2_5, Length: 11610, dtype: float64
y_test
11610 144.39
11611 144.39
11612 87.53
11613 80.80
11614 228.16
...
14128 3.96
14129 4.18
14130 3.96
14131 3.96
14132 3.81
Name: pm2_5, Length: 1291, dtype: float64
X_train
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 305.04 | 1452.45 | 4770457 | 0 | 0 | 1 | 48.05 | 5.96 | 12.51 | 41.13 | 467.30 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 306.10 | 3437.36 | 144736 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 305.70 | 10275.79 | 297638 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 306.66 | 4324.14 | 1148799 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 305.44 | 9046.87 | 123059 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 301.12 | 4542.29 | 631723 | 1 | 0 | 0 | 170.51 | 28.37 | 106.93 | 5.54 | 2643.59 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 300.12 | 1452.45 | 4770457 | 1 | 0 | 0 | 151.00 | 9.30 | 50.04 | 16.63 | 1668.93 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.93 | 3437.36 | 144736 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 299.74 | 10275.79 | 297638 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 300.15 | 4324.14 | 1148799 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
11610 rows × 18 columns
X_train.isna().sum()
station_10T 0 station_11T 0 station_12T 0 station_15T 0 station_3T 0 station_5T 0 station_61T 0 temp 0 population_density 0 factory_area 0 season_Cool Season 0 season_Hot Season 0 season_Rainy Season 0 pm10 0 so2 0 no2 0 o3 0 co 0 dtype: int64
X_test.isna().sum()
station_10T 0 station_11T 0 station_12T 0 station_15T 0 station_3T 0 station_5T 0 station_61T 0 temp 0 population_density 0 factory_area 0 season_Cool Season 0 season_Hot Season 0 season_Rainy Season 0 pm10 0 so2 0 no2 0 o3 0 co 0 dtype: int64
y_train.shape
(11610,)
y_train.isna().sum()
np.int64(0)
y_test.shape
(1291,)
y_test.isna().sum()
np.int64(0)
Handling Missing Values After Spliting¶
# Drop missing values in y_train and y_test
X_train = X_train[~y_train.isna()]
y_train = y_train.dropna()
X_test = X_test[~y_test.isna()]
y_test = y_test.dropna()
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
y_train
0 20.68
1 31.13
2 38.68
3 31.13
4 38.68
...
11605 99.46
11606 81.52
11607 214.77
11608 144.39
11609 214.77
Name: pm2_5, Length: 11610, dtype: float64
Check Distribution and skew value¶
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
X_test.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
Check distribution¶
temp¶
- X_train
sns.displot(X_train, x='temp')
plt.title('Distribution plot for temperature')
plt.show()
print('The distribution of temperature feature seems to be normaly distributed')
The distribution of temperature feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['temp'])
print('-'*30)
print(f"SKewness of temperature: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is very close to the center')
print('This suggest taht the distribution is nearly normaly distributed')
------------------------------ SKewness of temperature: 0.0419 ------------------------------ The skewness is being around 0.0419 which is very close to the center This suggest taht the distribution is nearly normaly distributed
- X_test
sns.displot(X_test, x='temp')
plt.title('Distribution plot for temperature')
plt.show()
print('The distribution of temperature feature seems to be normaly distributed')
The distribution of temperature feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['temp'])
print('-'*30)
print(f"SKewness of temperature: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is very close to the center')
print('This suggest taht the distribution is nearly normaly distributed')
------------------------------ SKewness of temperature: 0.2394 ------------------------------ The skewness is being around 0.2394 which is very close to the center This suggest taht the distribution is nearly normaly distributed
poppulation_density¶
- X_train
sns.displot(X_train, x='population_density')
plt.title('Distribution plot for population_density')
plt.show()
print('The distribution of population_density feature seems to be normaly distributed')
The distribution of population_density feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['population_density'])
print('-'*30)
print(f"SKewness of population_density: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of population_density: 0.5375 ------------------------------ The skewness is being around 0.5375 which is skewed to the right side This suggest taht the distribution is right-skewed
- X_test
sns.displot(X_test, x='population_density')
plt.title('Distribution plot for population_density')
plt.show()
print('The distribution of population_density feature seems to be normaly distributed')
The distribution of population_density feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['population_density'])
print('-'*30)
print(f"SKewness of population_density: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of population_density: 0.5368 ------------------------------ The skewness is being around 0.5368 which is skewed to the right side This suggest taht the distribution is right-skewed
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
print("Unique population_density values in X_train:", sorted(X_train['population_density'].unique()))
print("Value counts:")
print(X_train['population_density'].value_counts())
Unique population_density values in X_train: [np.float64(1452.45), np.float64(3437.36), np.float64(4324.14), np.float64(4542.29), np.float64(4788.74), np.float64(9046.87), np.float64(10275.79)] Value counts: population_density 1452.45 1659 3437.36 1659 10275.79 1659 4324.14 1659 9046.87 1658 4788.74 1658 4542.29 1658 Name: count, dtype: int64
factory_area¶
- X_train
sns.displot(X_train, x='factory_area')
plt.title('Distribution plot for factory_area')
plt.show()
print('The distribution of factory_area feature seems to be right-skewd distributed')
The distribution of factory_area feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['factory_area'])
print('-'*30)
print(f"SKewness of factory_area: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of factory_area: 1.8374 ------------------------------ The skewness is being around 1.8374 which is skewed to the right side This suggest taht the distribution is right-skewed
- X_test
sns.displot(X_test, x='factory_area')
plt.title('Distribution plot for factory_area')
plt.show()
print('The distribution of factory_area feature seems to be right-skewd distributed')
The distribution of factory_area feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['factory_area'])
print('-'*30)
print(f"SKewness of factory_area: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of factory_area: 1.8413 ------------------------------ The skewness is being around 1.8413 which is skewed to the right side This suggest taht the distribution is right-skewed
print("Unique factory_area values in X_train:", sorted(X_train['factory_area'].unique()))
print("Value counts:")
print(X_train['factory_area'].value_counts())
Unique factory_area values in X_train: [np.int64(54185), np.int64(123059), np.int64(144736), np.int64(297638), np.int64(631723), np.int64(1148799), np.int64(4770457)] Value counts: factory_area 4770457 1659 144736 1659 297638 1659 1148799 1659 123059 1658 54185 1658 631723 1658 Name: count, dtype: int64
season_Cool Season¶
- X-train
sns.displot(X_train, x='season_Cool Season')
plt.title('Distribution plot for season_Cool Season')
plt.show()
print('The distribution of season_Cool Season feature seems to be right-skewd distributed')
The distribution of season_Cool Season feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['season_Cool Season'])
print('-'*30)
print(f"SKewness of season_Cool Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of season_Cool Season: 0.4752 ------------------------------ The skewness is being around 0.4752 which is skewed to the right side This suggest taht the distribution is right-skewed
- X_test
sns.displot(X_test, x='season_Cool Season')
plt.title('Distribution plot for season_Cool Season')
plt.show()
print('The distribution of season_Cool Season feature seems to be right-skewd distributed')
The distribution of season_Cool Season feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['season_Cool Season'])
print('-'*30)
print(f"SKewness of season_Cool Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------ SKewness of season_Cool Season: 1.7532 ------------------------------ The skewness is being around 1.7532 which is skewed to the right side This suggest taht the distribution is right-skewed
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
season_Hot Season¶
- X_train
sns.displot(X_train, x='season_Hot Season')
plt.title('Distribution plot for season_Hot Season')
plt.show()
print('The distribution of season_Hot Season feature seems to be right-skewd distributed')
The distribution of season_Hot Season feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['season_Hot Season'])
print('-'*30)
print(f"SKewness of season_Hot Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest taht the distribution is heavily right-skewed')
------------------------------ SKewness of season_Hot Season: nan ------------------------------ The skewness is being around nan which is heavily skewed to the right side This suggest taht the distribution is heavily right-skewed
- X_test
sns.displot(X_test, x='season_Hot Season')
plt.title('Distribution plot for season_Hot Season')
plt.show()
print('The distribution of season_Hot Season feature seems to be right-skewd distributed')
The distribution of season_Hot Season feature seems to be right-skewd distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['season_Hot Season'])
print('-'*30)
print(f"SKewness of season_Hot Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest taht the distribution is heavily right-skewed')
------------------------------ SKewness of season_Hot Season: -1.7532 ------------------------------ The skewness is being around -1.7532 which is heavily skewed to the right side This suggest taht the distribution is heavily right-skewed
season_Rainy Season¶
- X_train
sns.displot(X_train, x='season_Rainy Season')
plt.title('Distribution plot for season_Rainy Season')
plt.show()
print('The distribution of season_Rainy Season feature seems to be normaly distributed')
The distribution of season_Rainy Season feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['season_Rainy Season'])
print('-'*30)
print(f"SKewness of season_Rainy Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is close to the center')
print('This suggest that the distribution is normaly distributed')
------------------------------ SKewness of season_Rainy Season: -0.4752 ------------------------------ The skewness is being around -0.4752 which is close to the center This suggest that the distribution is normaly distributed
- X_test
sns.displot(X_test, x='season_Rainy Season')
plt.title('Distribution plot for season_Rainy Season')
plt.show()
print('The distribution of season_Rainy Season feature seems to be normaly distributed')
The distribution of season_Rainy Season feature seems to be normaly distributed
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['season_Rainy Season'])
print('-'*30)
print(f"SKewness of season_Rainy Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is close to the center')
print('This suggest that the distribution is normaly distributed')
------------------------------ SKewness of season_Rainy Season: nan ------------------------------ The skewness is being around nan which is close to the center This suggest that the distribution is normaly distributed
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
pm10¶
- X_train
sns.displot(X_train, x='pm10')
plt.title('Distribution plot for pm10')
plt.show()
print('The distribution of pm10 feature seems to be heavily right-skewd distribution')
The distribution of pm10 feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['pm10'])
print('-'*30)
print(f"SKewness of pm10: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of pm10: 1.4901 ------------------------------ The skewness is being around 1.4901 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
- X_test
sns.displot(X_test, x='pm10')
plt.title('Distribution plot for pm10')
plt.show()
print('The distribution of pm10 feature seems to be heavily right-skewd distribution')
The distribution of pm10 feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['pm10'])
print('-'*30)
print(f"SKewness of pm10: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of pm10: 2.2215 ------------------------------ The skewness is being around 2.2215 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
so2¶
- X_train
sns.displot(X_train, x='so2')
plt.title('Distribution plot for so2')
plt.show()
print('The distribution of so2 feature seems to be right-skewd distribution')
The distribution of so2 feature seems to be right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['so2'])
print('-'*30)
print(f"SKewness of so2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest that the distribution is right-skewed')
------------------------------ SKewness of so2: 1.2583 ------------------------------ The skewness is being around 1.2583 which is skewed to the right side This suggest that the distribution is right-skewed
- X_test
sns.displot(X_test, x='so2')
plt.title('Distribution plot for so2')
plt.show()
print('The distribution of so2 feature seems to be right-skewd distribution')
The distribution of so2 feature seems to be right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['so2'])
print('-'*30)
print(f"SKewness of so2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest that the distribution is right-skewed')
------------------------------ SKewness of so2: 1.5841 ------------------------------ The skewness is being around 1.5841 which is skewed to the right side This suggest that the distribution is right-skewed
o3¶
- X_train
sns.displot(X_train, x='o3')
plt.title('Distribution plot for o3')
plt.show()
print('The distribution of o3 feature seems to be heavily right-skewd distribution')
The distribution of o3 feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['o3'])
print('-'*30)
print(f"SKewness of o3: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of o3: 3.0859 ------------------------------ The skewness is being around 3.0859 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
- X_test
sns.displot(X_test, x='o3')
plt.title('Distribution plot for o3')
plt.show()
print('The distribution of o3 feature seems to be heavily right-skewd distribution')
The distribution of o3 feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['o3'])
print('-'*30)
print(f"SKewness of o3: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of o3: 1.6909 ------------------------------ The skewness is being around 1.6909 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
co¶
- X_train
sns.displot(X_train, x='co')
plt.title('Distribution plot for co')
plt.show()
print('The distribution of co feature seems to be heavily right-skewd distribution')
The distribution of co feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['co'])
print('-'*30)
print(f"SKewness of co: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of co: 2.0521 ------------------------------ The skewness is being around 2.0521 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
- X_test
sns.displot(X_test, x='co')
plt.title('Distribution plot for co')
plt.show()
print('The distribution of co feature seems to be heavily right-skewd distribution')
The distribution of co feature seems to be heavily right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['co'])
print('-'*30)
print(f"SKewness of co: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of co: 2.0962 ------------------------------ The skewness is being around 2.0962 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
The distribution summary for the processed trainning dataset¶
'fuel_eff'has the normal distribution: Skewness of fuel_eff: 0.0015'year'has the left-skewed distribution: Skewness of year: -0.82'max_power'has theright-skeweddistribution: Skewness of max_power:0.84'km_driven'has theright-skeweddistribution: Skewness of km_driven:0.75
Handling Outliners¶
We found out that some of the features are unbalanced distributed
Thus, this can be caused by having the outliner and is also leaving unsolved
To improve the model performance in prediction, the outliners that can alter the predicting values must be handled
Rule of trump: The catrgorical features must be excluded from scaling
Check propamatic feature with abnormal distribution¶
no2 in X_train Need to be fixed¶
- X_train
sns.displot(X_train, x='no2')
plt.title('Distribution plot for no2')
plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
The distribution of no2 feature seems to be right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------ SKewness of no2: -39.3749 ------------------------------ The skewness is being around -39.3749 which is abnormal as the further investigation is needed This suggest that the distribution is abnormal as the further investigation is neede
- X_test
sns.displot(X_test, x='no2')
plt.title('Distribution plot for no2')
plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
The distribution of no2 feature seems to be right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_test['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of no2: 1.7355 ------------------------------ The skewness is being around 1.7355 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
pm2_5 in y_train needed to be fixed¶
- y_train
y_train
0 20.68
1 31.13
2 38.68
3 31.13
4 38.68
...
11605 99.46
11606 81.52
11607 214.77
11608 144.39
11609 214.77
Name: pm2_5, Length: 11610, dtype: float64
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(8, 5))
sns.histplot(y_train, kde=True, color="red")
plt.title("pm2_5 Distribution (y_train)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(y_train)
print('-'*30)
print(f"SKewness of pm2_5: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------ SKewness of pm2_5: 1.7241 ------------------------------ The skewness is being around 1.7241 which is abnormal as the further investigation is needed This suggest that the distribution is abnormal as the further investigation is neede
- y_test
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(8, 5))
sns.histplot(y_test, kde=True, color="red")
plt.title("pm2_5 Distribution (y_test)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(y_test)
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------ SKewness of no2: 2.2416 ------------------------------ The skewness is being around 2.2416 which is abnormal as the further investigation is needed This suggest that the distribution is abnormal as the further investigation is neede
upper_bound = y_train.quantile(0.94)
# lower_bound = y_train.quantile(0.05)
# y_train = y_train.copy()
y_train[y_train > upper_bound] = upper_bound
# y_train[y_train < lower_bound] = lower_bound
print("Old Max:", y_train.max())
# Replace any pm2_5 values above threshold with the median
threshold = 150
y_train[y_train > threshold] = y_train.median()
print("Number of outliers replaced:",
(y_train > threshold).sum())
print("Old Max:", y_train.max(), "| New Max:", y_train.max())
Old Max: 218.6 Number of outliers replaced: 0 Old Max: 149.99 | New Max: 149.99
print("Old Max:", y_test.max())
# Replace any pm2_5 values above threshold with the median
threshold = 150
y_test[y_test > threshold] = y_test.median()
print("Number of outliers replaced:",
(y_test > threshold).sum())
print("New Max:", y_test.max())
Old Max: 259.56 Number of outliers replaced: 0 New Max: 144.71 259.56 Number of outliers replaced: 0 New Max: 144.71
After capping outliners, check distribution and skewness again¶
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(8, 5))
sns.histplot(y_train, kde=True, color="red")
plt.title("pm2_5 Distribution (y_train)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(8, 5))
sns.histplot(y_test, kde=True, color="red")
plt.title("pm2_5 Distribution (y_test)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
Possible causes of extreme abnormal distribution of no2¶
- Distribution plot shows extreme negative skewness
The strange distribution reaching down to -10,000 and beyond is not normal at all.
NO₂ (Nitrogen Dioxide) levels can't realistically be negative in such extreme ways — it's likely:
- Corrupted values
- Measurement/recording errors
- Or possibly placeholder values for missing data (e.g., -9999)
- Skewness of -54.6277:
This is extremely negative skew, which strongly contradicts our plot description ("right-skewed").
This kind of value clearly shows abnormal, broken, or erroneous entries.
-> Issue found: X_train['no2'] column contains severe outliers or corrupted data, probably negative values that shouldn’t be there.
Solution:¶
Check for negative values and count occuerances
Investigate or clean them
# Check for negative values
print(X_train['no2'].describe())
print('-'*40)
print(f"Min value: {X_train['no2'].min()}")
print('-'*40)
print(f"Negative values count: {(X_train['no2'] < 0).sum()}")
count 11610.000000 mean 44.619483 std 249.396851 min -9999.000000 25% 27.080000 50% 41.130000 75% 63.750000 max 433.210000 Name: no2, dtype: float64 ---------------------------------------- Min value: -9999.0 ---------------------------------------- Negative values count: 7
# Remove rows with negative NO2
X_train_cleaned = X_train[X_train['no2'] >= 0]
X_train_cleaned
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 305.04 | 1452.45 | 4770457 | 0 | 0 | 1 | 48.05 | 5.96 | 12.51 | 41.13 | 467.30 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 306.10 | 3437.36 | 144736 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 305.70 | 10275.79 | 297638 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 306.66 | 4324.14 | 1148799 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 305.44 | 9046.87 | 123059 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 301.12 | 4542.29 | 631723 | 1 | 0 | 0 | 170.51 | 28.37 | 106.93 | 5.54 | 2643.59 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 300.12 | 1452.45 | 4770457 | 1 | 0 | 0 | 151.00 | 9.30 | 50.04 | 16.63 | 1668.93 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.93 | 3437.36 | 144736 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 299.74 | 10275.79 | 297638 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 300.15 | 4324.14 | 1148799 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
11603 rows × 18 columns
# Check for negative values
print(X_train_cleaned['no2'].describe())
print('-'*40)
print(f"Min value: {X_train_cleaned['no2'].min()}")
print('-'*40)
print(f"Negative values count: {(X_train_cleaned['no2'] < 0).sum()}")
count 11603.000000 mean 50.678721 std 36.574232 min 2.210000 25% 27.080000 50% 41.130000 75% 63.750000 max 433.210000 Name: no2, dtype: float64 ---------------------------------------- Min value: 2.21 ---------------------------------------- Negative values count: 0
The cleaned no2 (After handling corrupted values)¶
# Check distribution again
sns.displot(X_train_cleaned, x='no2')
plt.title('Distribution plot for no2')
plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
The distribution of no2 feature seems to be right-skewd distribution
# Check skewness
from scipy.stats import skew
# Calculate skewness
skew_value = skew(X_train_cleaned['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------ SKewness of no2: 2.3724 ------------------------------ The skewness is being around 2.3724 which is heavily skewed to the right side This suggest that the distribution is heavily right-skewed
8. Scaling¶
Log-transformation for right-skewed numerical features¶
All these plots we have found:¶
pm10so2o3cono2
They have to be log-transformed due to:¶
They are all heavily right-skewed
Continuous numerical features
Showing long tails and concentrated values near zero
Vulnerable to model distortion, especially with linear models or distance-based algorithms (like KNN, SVM, Logistic Regression, etc.)
# Apply log1p (log(1 + x)) for safe transformation
for col in ['pm10', 'so2', 'o3', 'co', 'no2']:
X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
X_test[col + '_log'] = np.log1p(X_test[col])
X_train_cleaned = X_train_cleaned.drop(columns=['co', 'no2', 'o3', 'pm10', 'so2'])
X_test = X_test.drop(columns=['co', 'no2', 'o3', 'pm10', 'so2'])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col]) C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col]) C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col]) C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col]) C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
X_train_cleaned
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 305.04 | 1452.45 | 4770457 | 0 | 0 | 1 | 3.892840 | 1.940179 | 3.740760 | 6.149109 | 2.603430 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 306.10 | 3437.36 | 144736 | 0 | 0 | 1 | 3.915816 | 2.859340 | 3.554491 | 6.553862 | 3.190888 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 305.70 | 10275.79 | 297638 | 0 | 0 | 1 | 4.224203 | 3.419692 | 0.722706 | 7.035154 | 3.724247 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 306.66 | 4324.14 | 1148799 | 0 | 0 | 1 | 3.915816 | 2.859340 | 3.554491 | 6.553862 | 3.190888 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 305.44 | 9046.87 | 123059 | 0 | 0 | 1 | 4.224203 | 3.419692 | 0.722706 | 7.035154 | 3.724247 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 301.12 | 4542.29 | 631723 | 1 | 0 | 0 | 5.144642 | 3.379974 | 1.877937 | 7.880271 | 4.681483 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 300.12 | 1452.45 | 4770457 | 1 | 0 | 0 | 5.023881 | 2.332144 | 2.869602 | 7.420537 | 3.932610 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.93 | 3437.36 | 144736 | 1 | 0 | 0 | 5.740339 | 4.187379 | 0.000000 | 8.731670 | 5.004349 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 299.74 | 10275.79 | 297638 | 1 | 0 | 0 | 5.566358 | 4.578005 | 0.000000 | 8.432485 | 4.887412 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 300.15 | 4324.14 | 1148799 | 1 | 0 | 0 | 5.740339 | 4.187379 | 0.000000 | 8.731670 | 5.004349 |
11603 rows × 18 columns
X_test
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 300.20 | 9046.87 | 123059 | 1 | 0 | 0 | 5.566358 | 4.578005 | 0.000000 | 8.432485 | 4.887412 |
| 11611 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 300.20 | 4788.74 | 54185 | 1 | 0 | 0 | 5.566358 | 4.578005 | 0.000000 | 8.432485 | 4.887412 |
| 11612 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 300.88 | 4542.29 | 631723 | 1 | 0 | 0 | 4.963893 | 3.241029 | 2.151762 | 7.739555 | 4.560068 |
| 11613 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 299.25 | 1452.45 | 4770457 | 1 | 0 | 0 | 4.968632 | 2.127041 | 3.079154 | 7.362943 | 3.848657 |
| 11614 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.10 | 3437.36 | 144736 | 1 | 0 | 0 | 5.800667 | 4.270676 | 0.000000 | 8.765566 | 5.013498 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 302.13 | 10275.79 | 297638 | 0 | 1 | 0 | 2.222459 | 0.254642 | 3.305054 | 5.130135 | 0.698135 |
| 14129 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 302.07 | 4324.14 | 1148799 | 0 | 1 | 0 | 2.145931 | 0.270027 | 2.996732 | 5.162956 | 0.908259 |
| 14130 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 302.09 | 9046.87 | 123059 | 0 | 1 | 0 | 2.222459 | 0.254642 | 3.305054 | 5.130135 | 0.698135 |
| 14131 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 302.09 | 4788.74 | 54185 | 0 | 1 | 0 | 2.222459 | 0.254642 | 3.305054 | 5.130135 | 0.698135 |
| 14132 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 302.12 | 4542.29 | 631723 | 0 | 1 | 0 | 2.178155 | 0.215111 | 3.343215 | 5.093627 | 0.593327 |
1291 rows × 18 columns
# Align target to the cleaned X
y_train_cleaned = y_train.loc[X_train_cleaned.index]
Apply Standard Scaler¶
X_train.columns
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
dtype='object')
from sklearn.preprocessing import StandardScaler
# Choose all columns to be scaled
log_cols = ['temp', 'population_density',
'factory_area', 'season_Cool Season', 'season_Hot Season',
'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']
# Fit only on training data, transform both
scaler = StandardScaler()
X_train_cleaned[log_cols] = scaler.fit_transform(X_train_cleaned[log_cols])
X_test[log_cols] = scaler.transform(X_test[log_cols])
X_train_cleaned
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0.830109 | -1.365528 | 2.385410 | -0.790614 | 0.0 | 0.790614 | -0.956019 | -2.170824 | 1.152111 | -1.869817 | -1.757042 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1.162721 | -0.680557 | -0.560282 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1.037207 | 1.679312 | -0.462913 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1.338441 | -0.374538 | 0.079112 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0.955623 | 1.255225 | -0.574086 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -0.399927 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.264840 | 0.706910 | -0.285255 | 0.177407 | 0.325171 | 1.456524 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | -0.713712 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.264840 | 0.546488 | -1.657504 | 0.696286 | -0.257739 | 0.298443 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -0.773331 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -0.832951 | 1.679312 | -0.462913 | 1.264840 | 0.0 | -1.264840 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | -0.704299 | -0.374538 | 0.079112 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
11603 rows × 18 columns
X_test
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | -0.688609 | 1.255225 | -0.574086 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11611 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -0.688609 | -0.214210 | -0.617946 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11612 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -0.475236 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.26484 | 0.466799 | -0.467219 | 0.320683 | 0.146753 | 1.268765 |
| 11613 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | -0.986705 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.26484 | 0.473094 | -1.926109 | 0.805932 | -0.330763 | 0.168616 |
| 11614 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -1.033773 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.26484 | 1.578393 | 0.881218 | -0.805205 | 1.447660 | 1.969963 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -0.083005 | 1.679312 | -0.462913 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14129 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | -0.101832 | -0.374538 | 0.079112 | -0.790614 | 1.0 | -1.26484 | -3.276662 | -4.358073 | 0.762805 | -3.120188 | -4.378508 |
| 14130 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | -0.095556 | 1.255225 | -0.574086 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14131 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -0.095556 | -0.214210 | -0.617946 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14132 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -0.086143 | -0.299257 | -0.250165 | -0.790614 | 1.0 | -1.26484 | -3.233855 | -4.429991 | 0.944099 | -3.208091 | -4.865529 |
1291 rows × 18 columns
y_test
11610 144.39
11611 144.39
11612 87.53
11613 80.80
11614 32.59
...
14128 3.96
14129 4.18
14130 3.96
14131 3.96
14132 3.81
Name: pm2_5, Length: 1291, dtype: float64
y_train
0 20.680
1 31.130
2 38.680
3 31.130
4 38.680
...
11605 99.460
11606 81.520
11607 63.305
11608 144.390
11609 63.305
Name: pm2_5, Length: 11610, dtype: float64
Check the summary statistics for both features to confirm the transformations¶
print(X_train_cleaned[log_cols].describe())
print('-'*140)
print('According to the summary statistics, the \'pm10_log\', \'so2_log\', \'co_log\', \'o3_log\' column has been successfully transformed and standardized')
temp population_density factory_area season_Cool Season \
count 1.160300e+04 1.160300e+04 1.160300e+04 1.160300e+04
mean -5.584892e-15 1.604240e-16 5.492269e-18 -2.351533e-16
std 1.000043e+00 1.000043e+00 1.000043e+00 1.000043e+00
min -3.048272e+00 -1.365528e+00 -6.179456e-01 -7.906137e-01
25% -7.105744e-01 -6.805566e-01 -5.740861e-01 -7.906137e-01
50% -3.279908e-02 -2.992572e-01 -4.629130e-01 -7.906137e-01
75% 6.951818e-01 1.255225e+00 7.911237e-02 1.264840e+00
max 3.873823e+00 1.679312e+00 2.385410e+00 1.264840e+00
season_Hot Season season_Rainy Season pm10_log so2_log \
count 11603.0 1.160300e+04 1.160300e+04 1.160300e+04
mean 0.0 -7.838444e-17 5.290950e-16 2.694465e-16
std 0.0 1.000043e+00 1.000043e+00 1.000043e+00
min 0.0 -1.264840e+00 -3.012631e+00 -3.016115e+00
25% 0.0 -1.264840e+00 -6.606180e-01 -6.506113e-01
50% 0.0 7.906137e-01 7.491591e-02 1.684495e-01
75% 0.0 7.906137e-01 7.173640e-01 7.531009e-01
max 0.0 7.906137e-01 2.608362e+00 2.483305e+00
no2_log co_log o3_log
count 1.160300e+04 1.160300e+04 1.160300e+04
mean 3.331339e-16 7.446522e-16 5.878833e-17
std 1.000043e+00 1.000043e+00 1.000043e+00
min -3.979510e+00 -2.373563e+00 -8.052052e-01
25% -6.256302e-01 -7.024295e-01 -8.052052e-01
50% 1.760925e-03 -4.370793e-02 -6.291494e-01
75% 6.663764e-01 7.088715e-01 8.532980e-01
max 3.609227e+00 2.840489e+00 2.462989e+00
--------------------------------------------------------------------------------------------------------------------------------------------
According to the summary statistics, the 'pm10_log', 'so2_log', 'co_log', 'o3_log' column has been successfully transformed and standardized
9. Modeling¶
Modeling using non-parametric method (XGBoost, RandomForest, DecisionTree)¶
Scaling for XGBoost model¶
- We will use these scaled X features for
XGBoostmodel only
# Import modules for modeling
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
X_test
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | -0.688609 | 1.255225 | -0.574086 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11611 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -0.688609 | -0.214210 | -0.617946 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11612 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -0.475236 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.26484 | 0.466799 | -0.467219 | 0.320683 | 0.146753 | 1.268765 |
| 11613 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | -0.986705 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.26484 | 0.473094 | -1.926109 | 0.805932 | -0.330763 | 0.168616 |
| 11614 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -1.033773 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.26484 | 1.578393 | 0.881218 | -0.805205 | 1.447660 | 1.969963 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -0.083005 | 1.679312 | -0.462913 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14129 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | -0.101832 | -0.374538 | 0.079112 | -0.790614 | 1.0 | -1.26484 | -3.276662 | -4.358073 | 0.762805 | -3.120188 | -4.378508 |
| 14130 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | -0.095556 | 1.255225 | -0.574086 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14131 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -0.095556 | -0.214210 | -0.617946 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14132 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -0.086143 | -0.299257 | -0.250165 | -0.790614 | 1.0 | -1.26484 | -3.233855 | -4.429991 | 0.944099 | -3.208091 | -4.865529 |
1291 rows × 18 columns
# Double-Check Time Splits (Data Leakage Check)
print("Train Date Range:", X_train_cleaned.index.min(), "to", X_train_cleaned.index.max())
print("Test Date Range:", X_test.index.min(), "to", X_test.index.max())
Train Date Range: 0 to 11609 Test Date Range: 11610 to 14132
X_test.shape
(1291, 18)
X_train_cleaned.shape
(11603, 18)
# Define the models
models = {
"RandomForest": RandomForestRegressor(random_state=42),
"XGBoost": XGBRegressor(objective="reg:squarederror", random_state=42),
"DecisionTree": DecisionTreeRegressor(random_state=42)
}
# Define hyperparameter grids
param_grids = {
"RandomForest": {
"n_estimators": [100, 200, 250],
"max_depth": [8, 12, 15],
"min_samples_split": [3, 5]
},
"XGBoost": {
"n_estimators": [100, 200, 250],
"learning_rate": [0.1, 0.01, 0.001],
"max_depth": [8, 12],
"subsample": [0.7, 0.9],
"colsample_bytree": [0.7, 1]
},
"DecisionTree": {
"max_depth": [5, 10, 20],
"min_samples_split": [5, 7, 12]
}
}
X_train_cleaned = X_train_cleaned.drop(columns=[col for col in X_train_cleaned.columns if col.startswith("station_")])
X_train_cleaned
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.830109 | -1.365528 | 2.385410 | -0.790614 | 0.0 | 0.790614 | -0.956019 | -2.170824 | 1.152111 | -1.869817 | -1.757042 |
| 1 | 1.162721 | -0.680557 | -0.560282 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 2 | 1.037207 | 1.679312 | -0.462913 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| 3 | 1.338441 | -0.374538 | 0.079112 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 4 | 0.955623 | 1.255225 | -0.574086 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | -0.399927 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.264840 | 0.706910 | -0.285255 | 0.177407 | 0.325171 | 1.456524 |
| 11606 | -0.713712 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.264840 | 0.546488 | -1.657504 | 0.696286 | -0.257739 | 0.298443 |
| 11607 | -0.773331 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
| 11608 | -0.832951 | 1.679312 | -0.462913 | 1.264840 | 0.0 | -1.264840 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11609 | -0.704299 | -0.374538 | 0.079112 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
11603 rows × 11 columns
X_test = X_test.drop(columns=[col for col in X_test.columns if col.startswith("station_")])
X_test
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | -0.688609 | 1.255225 | -0.574086 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11611 | -0.688609 | -0.214210 | -0.617946 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11612 | -0.475236 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.26484 | 0.466799 | -0.467219 | 0.320683 | 0.146753 | 1.268765 |
| 11613 | -0.986705 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.26484 | 0.473094 | -1.926109 | 0.805932 | -0.330763 | 0.168616 |
| 11614 | -1.033773 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.26484 | 1.578393 | 0.881218 | -0.805205 | 1.447660 | 1.969963 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | -0.083005 | 1.679312 | -0.462913 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14129 | -0.101832 | -0.374538 | 0.079112 | -0.790614 | 1.0 | -1.26484 | -3.276662 | -4.358073 | 0.762805 | -3.120188 | -4.378508 |
| 14130 | -0.095556 | 1.255225 | -0.574086 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14131 | -0.095556 | -0.214210 | -0.617946 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14132 | -0.086143 | -0.299257 | -0.250165 | -0.790614 | 1.0 | -1.26484 | -3.233855 | -4.429991 | 0.944099 | -3.208091 | -4.865529 |
1291 rows × 11 columns
y_test
11610 144.39
11611 144.39
11612 87.53
11613 80.80
11614 32.59
...
14128 3.96
14129 4.18
14130 3.96
14131 3.96
14132 3.81
Name: pm2_5, Length: 1291, dtype: float64
y_train_cleaned
0 20.680
1 31.130
2 38.680
3 31.130
4 38.680
...
11605 99.460
11606 81.520
11607 63.305
11608 144.390
11609 63.305
Name: pm2_5, Length: 11603, dtype: float64
X_train_cleaned
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.830109 | -1.365528 | 2.385410 | -0.790614 | 0.0 | 0.790614 | -0.956019 | -2.170824 | 1.152111 | -1.869817 | -1.757042 |
| 1 | 1.162721 | -0.680557 | -0.560282 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 2 | 1.037207 | 1.679312 | -0.462913 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| 3 | 1.338441 | -0.374538 | 0.079112 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 |
| 4 | 0.955623 | 1.255225 | -0.574086 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | -0.399927 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.264840 | 0.706910 | -0.285255 | 0.177407 | 0.325171 | 1.456524 |
| 11606 | -0.713712 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.264840 | 0.546488 | -1.657504 | 0.696286 | -0.257739 | 0.298443 |
| 11607 | -0.773331 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
| 11608 | -0.832951 | 1.679312 | -0.462913 | 1.264840 | 0.0 | -1.264840 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11609 | -0.704299 | -0.374538 | 0.079112 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 |
11603 rows × 11 columns
# Perform Cross-Validation and GridSearchCV
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.model_selection import train_test_split, cross_val_score
best_models = {}
for model_name, model in models.items():
print(f"Training {model_name}...")
# # Use scaled data for XGBoost, but original data for RF and DT
# X_train_cleaned = X_train_cleaned if model_name == "XGBoost" else X_train
# X_test_used = X_test if model_name == "XGBoost" else X_test
# GridSearchCV
grid_search = GridSearchCV(model, param_grids[model_name], cv=5, scoring="neg_mean_squared_error", n_jobs=-1)
grid_search.fit(X_train_cleaned, y_train_cleaned)
# Best model
best_model = grid_search.best_estimator_
best_models[model_name] = best_model
# Cross-validation scores
mse_scores = -cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="neg_mean_squared_error")
rmse_scores = np.sqrt(mse_scores)
mae_scores = -cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="neg_mean_absolute_error")
r2_scores = cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="r2")
mean_cv_rmse = rmse_scores.mean()
mean_cv_mae = mae_scores.mean()
mean_cv_mse = -mse_scores.mean()
mean_cv_r2 = r2_scores.mean()
# Evaluate on test set
y_pred = best_model.predict(X_test)
test_rmse = np.sqrt(mean_squared_error(y_test, y_pred))
test_mae = mean_absolute_error(y_test, y_pred)
test_mse = mean_squared_error(y_test, y_pred)
test_r2 = r2_score(y_test, y_pred)
# Print evaluation metrics
print(f"{model_name} Mean CV RMSE: {mean_cv_rmse}")
print(f"{model_name} Mean CV MAE: {mean_cv_mae}")
print(f"{model_name} Mean CV MSE: {mean_cv_mse}")
print(f"{model_name} Mean CV R²: {mean_cv_r2}")
print(f"{model_name} Test RMSE: {test_rmse}")
print(f"{model_name} Test MAE: {test_mae}")
print(f"{model_name} Test MSE: {test_mse}")
print(f"{model_name} Test R²: {test_r2}\n")
Training RandomForest... RandomForest Mean CV RMSE: 12.852386449819278 RandomForest Mean CV MAE: 7.649770542406318 RandomForest Mean CV MSE: -177.6366260200761 RandomForest Mean CV R²: 0.8068362723980183 RandomForest Test RMSE: 10.982860270514914 RandomForest Test MAE: 5.833144424345439 RandomForest Test MSE: 120.62321972165493 RandomForest Test R²: 0.8761427145595069 Training XGBoost... XGBoost Mean CV RMSE: 12.471040897786319 XGBoost Mean CV MAE: 7.48887977393246 XGBoost Mean CV MSE: -168.44409597651915 XGBoost Mean CV R²: 0.8165701665464317 XGBoost Test RMSE: 10.146072088643475 XGBoost Test MAE: 5.807055082978619 XGBoost Test MSE: 102.94277882795016 XGBoost Test R²: 0.8942971911150039 Training DecisionTree... DecisionTree Mean CV RMSE: 14.777887785541722 DecisionTree Mean CV MAE: 9.759514350563498 DecisionTree Mean CV MSE: -230.9468851787038 DecisionTree Mean CV R²: 0.7457814099000715 DecisionTree Test RMSE: 12.974886321281824 DecisionTree Test MAE: 7.798185472523801 DecisionTree Test MSE: 168.34767505018618 DecisionTree Test R²: 0.8271387043883476
Best Model: XGBoost¶
XGBoost sparkled in cross-validation, it is also stumbled less on the test set.
XGBoost had:
Stable performance between CV and test
Lowest test RMSE and MSE
Highest test R²
Save the model for future usages...¶
import os
import pickle
# Define save directory
save_dir = "../saved_model"
os.makedirs(save_dir, exist_ok=True) # Ensure directory exists
# File paths
model_path = os.path.join(save_dir, "best_xgb_model.pkl")
scaler_path = os.path.join(save_dir, "scaler.pkl")
# Save column names order during training
with open("../saved_model/log_col_order.pkl", "wb") as f:
pickle.dump(log_cols, f)
# Save objects
pickle.dump(best_models["XGBoost"], open(model_path, "wb")) # Save model
pickle.dump(scaler, open(scaler_path, "wb")) # Save MinMaxScaler (or StandardScaler)
print(f"Best XGBoost model has been successfully saved in {save_dir}")
print(f"The column names order during training has been successfully saved in {save_dir}")
print(f"The scaler has been successfully saved in {save_dir}")
Best XGBoost model has been successfully saved in ../saved_model The column names order during training has been successfully saved in ../saved_model The scaler has been successfully saved in ../saved_model
Load the model...¶
X_test.columns
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
'o3_log', 'co_log', 'no2_log'],
dtype='object')
# Load saved model and scaler
with open("../saved_model/best_xgb_model.pkl", "rb") as f:
best_xgb_model = pickle.load(f)
print("Model loaded successfully!")
with open("../saved_model/scaler.pkl", "rb") as f:
loaded_scaler = pickle.load(f)
print("Scaler loaded successfully!")
with open("../saved_model/log_col_order.pkl", "rb") as f:
log_cols = pickle.load(f)
# # Define other columns used in training
# other_cols = ['temp', 'population_density', 'factory_area',
# 'season_Cool Season', 'season_Hot Season', 'season_Rainy Season']
# Prepare input features
X_test_log = X_test[log_cols]
scaled_log = pd.DataFrame(
loaded_scaler.transform(X_test_log), # no .values
columns=log_cols,
index=X_test.index
)
# X_test_final = pd.concat([scaled_log, X_test[other_cols]], axis=1)
X_test_final = X_test_log.copy()
# [Optional safety step]
# Ensure column order matches what model was trained with
if hasattr(best_xgb_model, 'feature_names_in_'):
X_test_final = X_test_final[best_xgb_model.feature_names_in_]
# Make predictions
predictions = best_xgb_model.predict(X_test_final)
Model loaded successfully! Scaler loaded successfully!
9.Feature Importance¶
Check feature importance¶
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from xgboost import XGBRegressor
# Fit a XGBoost model on the entire train set for a global view
xgb_model = XGBRegressor(random_state=42)
xgb_model.fit(X_train_cleaned, y_train_cleaned)
# IMPORTANT: Use the actual feature names that were passed into the model
used_features = X_train_cleaned.columns.tolist()
if 'pm2_5' in used_features:
used_features.remove('pm2_5')
print("Used features (count = {}):".format(len(used_features)))
print(used_features)
# Make sure xgb_model.feature_importances_ has the same length as used_features
print("xgb_model.feature_importances_ shape:", xgb_model.feature_importances_.shape)
# Create a DataFrame with feature importance
importance_df = pd.DataFrame({
"feature": used_features,
"importance": xgb_model.feature_importances_
}).sort_values(by="importance", ascending=False)
# Plot feature importance
plt.figure(figsize=(12, 6))
sns.barplot(x="importance", y="feature", data=importance_df, palette="coolwarm")
plt.title("Feature Importance from XGBoost")
plt.tight_layout()
plt.show()
Used features (count = 11): ['temp', 'population_density', 'factory_area', 'season_Cool Season', 'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'o3_log', 'co_log', 'no2_log'] xgb_model.feature_importances_ shape: (11,)
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1139130461.py:29: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect. sns.barplot(x="importance", y="feature", data=importance_df, palette="coolwarm")
Check overall feature correlation to pm2_5¶
# Plot correlation
X_train_cleaned['pm2_5'] = y_train_cleaned
correlation_matrix = X_train_cleaned.corr()
pm25_correlations = correlation_matrix['pm2_5'].drop('pm2_5').sort_values(ascending=False)
plt.figure(figsize=(12, 6))
sns.barplot(x=pm25_correlations.values, y=pm25_correlations.index, palette='coolwarm')
plt.title('Feature Correlation with pm2_5')
plt.xlabel('Correlation Coefficient')
plt.ylabel('Feature')
plt.tight_layout()
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\2790382756.py:7: FutureWarning: Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect. sns.barplot(x=pm25_correlations.values, y=pm25_correlations.index, palette='coolwarm')
Check feature correlation to pm2_5 for each feature one by one¶
Temperature vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import spearmanr
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['temp'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['temp'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('Temperature (Fahrenheit)')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: Temperature vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
Population density vs pm2_5¶
X_test.columns
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
'o3_log', 'co_log', 'no2_log'],
dtype='object')
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['population_density'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['population_density'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('population_density')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: population_density vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
Factory area vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['factory_area'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['factory_area'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('factory_area')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: factory_area vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
season_Cool Season vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Cool Season'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Cool Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Cool Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Cool Season vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
season_Hot Season vs pm2_5 Box_plot¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Hot Season'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Hot Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Hot Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Hot Seasonn vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
season_Rainy Season vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Rainy Season'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Rainy Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Rainy Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Rainy Season vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\2472194936.py:5: ConstantInputWarning: An input array is constant; the correlation coefficient is not defined. spearman_coef, _ = spearmanr(X_test['season_Rainy Season'], y_pred)
pm10 vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['pm10_log'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['pm10_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('pm10_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: pm10 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
so2 vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['so2_log'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['so2_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('so2_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: so2 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
o3 vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['o3_log'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['o3_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('o3_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: o3 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
co vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['co_log'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['co_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('co_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: co vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
no2 vs pm2_5¶
import matplotlib.pyplot as plt
import seaborn as sns
# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['no2_log'], y_pred)
plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['no2_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('no2_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: no2 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
X_train_cleaned
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | pm2_5 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.830109 | -1.365528 | 2.385410 | -0.790614 | 0.0 | 0.790614 | -0.956019 | -2.170824 | 1.152111 | -1.869817 | -1.757042 | 20.680 |
| 1 | 1.162721 | -0.680557 | -0.560282 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 | 31.130 |
| 2 | 1.037207 | 1.679312 | -0.462913 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 | 38.680 |
| 3 | 1.338441 | -0.374538 | 0.079112 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 | 31.130 |
| 4 | 0.955623 | 1.255225 | -0.574086 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 | 38.680 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | -0.399927 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.264840 | 0.706910 | -0.285255 | 0.177407 | 0.325171 | 1.456524 | 99.460 |
| 11606 | -0.713712 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.264840 | 0.546488 | -1.657504 | 0.696286 | -0.257739 | 0.298443 | 81.520 |
| 11607 | -0.773331 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 | 63.305 |
| 11608 | -0.832951 | 1.679312 | -0.462913 | 1.264840 | 0.0 | -1.264840 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 | 144.390 |
| 11609 | -0.704299 | -0.374538 | 0.079112 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 | 63.305 |
11603 rows × 12 columns
X_test
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | -0.688609 | 1.255225 | -0.574086 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11611 | -0.688609 | -0.214210 | -0.617946 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 |
| 11612 | -0.475236 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.26484 | 0.466799 | -0.467219 | 0.320683 | 0.146753 | 1.268765 |
| 11613 | -0.986705 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.26484 | 0.473094 | -1.926109 | 0.805932 | -0.330763 | 0.168616 |
| 11614 | -1.033773 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.26484 | 1.578393 | 0.881218 | -0.805205 | 1.447660 | 1.969963 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | -0.083005 | 1.679312 | -0.462913 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14129 | -0.101832 | -0.374538 | 0.079112 | -0.790614 | 1.0 | -1.26484 | -3.276662 | -4.358073 | 0.762805 | -3.120188 | -4.378508 |
| 14130 | -0.095556 | 1.255225 | -0.574086 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14131 | -0.095556 | -0.214210 | -0.617946 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 |
| 14132 | -0.086143 | -0.299257 | -0.250165 | -0.790614 | 1.0 | -1.26484 | -3.233855 | -4.429991 | 0.944099 | -3.208091 | -4.865529 |
1291 rows × 11 columns
y_test
11610 144.39
11611 144.39
11612 87.53
11613 80.80
11614 32.59
...
14128 3.96
14129 4.18
14130 3.96
14131 3.96
14132 3.81
Name: pm2_5, Length: 1291, dtype: float64
y_pred
array([76.74866422, 76.74866422, 88.01131413, ..., 5.87140468,
5.87140468, 5.87140468], shape=(1291,))
Actual pm2_5 vs Predicted pm2_5 dataframe with error rate¶
# Combine them into a single DataFrame for comparison
comparison_df = X_test.copy()
comparison_df['y_test'] = y_test.values
comparison_df['y_pred'] = y_pred
# Calculate error rate as percentage difference
comparison_df['error_percent'] = ((comparison_df['y_pred'] - comparison_df['y_test']).abs() / comparison_df['y_test']) * 100
comparison_df
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | y_test | y_pred | error_percent | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11610 | -0.688609 | 1.255225 | -0.574086 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 | 144.39 | 76.748664 | 46.846275 |
| 11611 | -0.688609 | -0.214210 | -0.617946 | 1.264840 | 0.0 | -1.26484 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 | 144.39 | 76.748664 | 46.846275 |
| 11612 | -0.475236 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.26484 | 0.466799 | -0.467219 | 0.320683 | 0.146753 | 1.268765 | 87.53 | 88.011314 | 0.549885 |
| 11613 | -0.986705 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.26484 | 0.473094 | -1.926109 | 0.805932 | -0.330763 | 0.168616 | 80.80 | 70.420000 | 12.846535 |
| 11614 | -1.033773 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.26484 | 1.578393 | 0.881218 | -0.805205 | 1.447660 | 1.969963 | 32.59 | 63.923526 | 96.144602 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 14128 | -0.083005 | 1.679312 | -0.462913 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 | 3.96 | 5.871405 | 48.267795 |
| 14129 | -0.101832 | -0.374538 | 0.079112 | -0.790614 | 1.0 | -1.26484 | -3.276662 | -4.358073 | 0.762805 | -3.120188 | -4.378508 | 4.18 | 5.871405 | 40.464227 |
| 14130 | -0.095556 | 1.255225 | -0.574086 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 | 3.96 | 5.871405 | 48.267795 |
| 14131 | -0.095556 | -0.214210 | -0.617946 | -0.790614 | 1.0 | -1.26484 | -3.175001 | -4.378221 | 0.924132 | -3.161802 | -4.703450 | 3.96 | 5.871405 | 48.267795 |
| 14132 | -0.086143 | -0.299257 | -0.250165 | -0.790614 | 1.0 | -1.26484 | -3.233855 | -4.429991 | 0.944099 | -3.208091 | -4.865529 | 3.81 | 5.871405 | 54.105110 |
1291 rows × 14 columns
comparison_df['error_percent'].mean()
np.float64(28.104628985876047)
Inference¶
X_train
| station_10T | station_11T | station_12T | station_15T | station_3T | station_5T | station_61T | temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10 | so2 | no2 | o3 | co | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 305.04 | 1452.45 | 4770457 | 0 | 0 | 1 | 48.05 | 5.96 | 12.51 | 41.13 | 467.30 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 306.10 | 3437.36 | 144736 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 305.70 | 10275.79 | 297638 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| 3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 306.66 | 4324.14 | 1148799 | 0 | 0 | 1 | 49.19 | 16.45 | 23.31 | 33.97 | 700.95 |
| 4 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 305.44 | 9046.87 | 123059 | 0 | 0 | 1 | 67.32 | 29.56 | 40.44 | 1.06 | 1134.87 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 301.12 | 4542.29 | 631723 | 1 | 0 | 0 | 170.51 | 28.37 | 106.93 | 5.54 | 2643.59 |
| 11606 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 300.12 | 1452.45 | 4770457 | 1 | 0 | 0 | 151.00 | 9.30 | 50.04 | 16.63 | 1668.93 |
| 11607 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 299.93 | 3437.36 | 144736 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
| 11608 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 299.74 | 10275.79 | 297638 | 1 | 0 | 0 | 260.48 | 96.32 | 131.61 | 0.00 | 4592.90 |
| 11609 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 300.15 | 4324.14 | 1148799 | 1 | 0 | 0 | 310.17 | 64.85 | 148.06 | 0.00 | 6195.07 |
11610 rows × 18 columns
X_train_cleaned
| temp | population_density | factory_area | season_Cool Season | season_Hot Season | season_Rainy Season | pm10_log | so2_log | o3_log | co_log | no2_log | pm2_5 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.830109 | -1.365528 | 2.385410 | -0.790614 | 0.0 | 0.790614 | -0.956019 | -2.170824 | 1.152111 | -1.869817 | -1.757042 | 20.680 |
| 1 | 1.162721 | -0.680557 | -0.560282 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 | 31.130 |
| 2 | 1.037207 | 1.679312 | -0.462913 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 | 38.680 |
| 3 | 1.338441 | -0.374538 | 0.079112 | -0.790614 | 0.0 | 0.790614 | -0.925497 | -0.967083 | 1.054647 | -1.356620 | -0.848579 | 31.130 |
| 4 | 0.955623 | 1.255225 | -0.574086 | -0.790614 | 0.0 | 0.790614 | -0.515827 | -0.233240 | -0.427056 | -0.746376 | -0.023776 | 38.680 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 11605 | -0.399927 | -0.299257 | -0.250165 | 1.264840 | 0.0 | -1.264840 | 0.706910 | -0.285255 | 0.177407 | 0.325171 | 1.456524 | 99.460 |
| 11606 | -0.713712 | -1.365528 | 2.385410 | 1.264840 | 0.0 | -1.264840 | 0.546488 | -1.657504 | 0.696286 | -0.257739 | 0.298443 | 81.520 |
| 11607 | -0.773331 | -0.680557 | -0.560282 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 | 63.305 |
| 11608 | -0.832951 | 1.679312 | -0.462913 | 1.264840 | 0.0 | -1.264840 | 1.267130 | 1.283698 | -0.805205 | 1.025337 | 1.774980 | 144.390 |
| 11609 | -0.704299 | -0.374538 | 0.079112 | 1.264840 | 0.0 | -1.264840 | 1.498252 | 0.772132 | -0.805205 | 1.404683 | 1.955814 | 63.305 |
11603 rows × 12 columns
X_train_cleaned.columns
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
'o3_log', 'co_log', 'no2_log', 'pm2_5'],
dtype='object')
Create sample dataframe¶
sample_df1¶
import pandas as pd
import numpy as np
from joblib import load
import matplotlib.pyplot as plt
import seaborn as sns
# ----- Step 1: Load your stored column order -----
log_col_order = load("../saved_model/log_col_order.pkl") # This should be a list of column names in the correct order
# ----- Step 2: Create your sample raw data and compute log-transformed features -----
# Create the raw sample data as a dictionary
sample_raw = {
'temp': [95],
'population_density': [4788.74],
'factory_area': [54185],
'season_Cool Season': [1],
'season_Hot Season': [0],
'season_Rainy Season': [0],
'pm10': [78],
'so2': [27.31],
'o3': [9.41],
'co': [2198],
'no2': [31]
}
# Build the DataFrame from raw data
sample_df = pd.DataFrame(sample_raw)
# Compute log-transformed features
sample_df['pm10_log'] = np.log1p(sample_df['pm10'])
sample_df['so2_log'] = np.log1p(sample_df['so2'])
sample_df['o3_log'] = np.log1p(sample_df['o3'])
sample_df['co_log'] = np.log1p(sample_df['co'])
sample_df['no2_log'] = np.log1p(sample_df['no2'])
# Drop the raw pollutant columns as your model was trained on the log-transformed values
sample_df.drop(columns=['pm10', 'so2', 'o3', 'co', 'no2'], inplace=True)
# ----- Step 3: Reorder sample DataFrame according to log_col_order -----
# Make sure that the list log_col_order exactly matches the columns expected by the model.
# For example, log_col_order might be:
# ['temp', 'population_density', 'factory_area', 'season_Cool Season',
# 'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']
sample_df = sample_df[log_col_order]
print("Sample DataFrame after reordering:")
print(sample_df)
# ----- Step 4: Load the scaler and best XGBoost model -----
scaler = load("../saved_model/scaler.pkl")
best_xgb_model = load("../saved_model/Best_XGBoost_model.pkl") # Adjust the file name as necessary
# ----- Step 5: Scale the sample data -----
sample_df_scaled = sample_df.copy()
sample_df_scaled[log_col_order] = scaler.transform(sample_df[log_col_order])
# ----- Step 6: Make prediction -----
y_pred_sample = best_xgb_model.predict(sample_df_scaled)
print("Predicted PM2.5 for the sample:", y_pred_sample[0])
Sample DataFrame after reordering:
temp population_density factory_area season_Cool Season \
0 95 4788.74 54185 1
season_Hot Season season_Rainy Season pm10_log so2_log no2_log \
0 0 0 4.369448 3.343215 3.465736
co_log o3_log
0 7.695758 2.342767
Predicted PM2.5 for the sample: 51.722874
c:\Users\Legion 5 Pro\AppData\Local\Programs\Python\Python311\Lib\pickle.py:1718: UserWarning: [21:52:24] WARNING: C:\actions-runner\_work\xgboost\xgboost\src\data\../common/error_msg.h:82: If you are loading a serialized model (like pickle in Python, RDS in R) or
configuration generated by an older version of XGBoost, please export the model by calling
`Booster.save_model` from that version first, then load it back in current version. See:
https://xgboost.readthedocs.io/en/stable/tutorials/saving_model.html
for more details about differences between saving model and serializing.
setstate(state)
sample_df2¶
import pandas as pd
import numpy as np
from joblib import load
import matplotlib.pyplot as plt
import seaborn as sns
# ----- Step 1: Load your stored column order -----
log_col_order = load("../saved_model/log_col_order.pkl") # This should be a list of column names in the correct order
# ----- Step 2: Create your sample raw data and compute log-transformed features -----
# Create the raw sample data as a dictionary
sample_raw = {
'temp': [95],
'population_density': [4788.74],
'factory_area': [54185],
'season_Cool Season': [1],
'season_Hot Season': [0],
'season_Rainy Season': [0],
'pm10': [138],
'so2': [27.31],
'o3': [9.41],
'co': [2198],
'no2': [31]
}
# Build the DataFrame from raw data
sample_df = pd.DataFrame(sample_raw)
# Compute log-transformed features
sample_df['pm10_log'] = np.log1p(sample_df['pm10'])
sample_df['so2_log'] = np.log1p(sample_df['so2'])
sample_df['o3_log'] = np.log1p(sample_df['o3'])
sample_df['co_log'] = np.log1p(sample_df['co'])
sample_df['no2_log'] = np.log1p(sample_df['no2'])
# Drop the raw pollutant columns as your model was trained on the log-transformed values
sample_df.drop(columns=['pm10', 'so2', 'o3', 'co', 'no2'], inplace=True)
# ----- Step 3: Reorder sample DataFrame according to log_col_order -----
# Make sure that the list log_col_order exactly matches the columns expected by the model.
# For example, log_col_order might be:
# ['temp', 'population_density', 'factory_area', 'season_Cool Season',
# 'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']
sample_df = sample_df[log_col_order]
print("Sample DataFrame after reordering:")
print(sample_df)
# ----- Step 4: Load the scaler and best XGBoost model -----
scaler = load("../saved_model/scaler.pkl")
best_xgb_model = load("../saved_model/Best_XGBoost_model.pkl") # Adjust the file name as necessary
# ----- Step 5: Scale the sample data -----
sample_df_scaled = sample_df.copy()
sample_df_scaled[log_col_order] = scaler.transform(sample_df[log_col_order])
# ----- Step 6: Make prediction -----
y_pred_sample = best_xgb_model.predict(sample_df_scaled)
print("Predicted PM2.5 for the sample:", y_pred_sample[0])
Sample DataFrame after reordering:
temp population_density factory_area season_Cool Season \
0 95 4788.74 54185 1
season_Hot Season season_Rainy Season pm10_log so2_log no2_log \
0 0 0 4.934474 3.343215 3.465736
co_log o3_log
0 7.695758 2.342767
Predicted PM2.5 for the sample: 129.86984